Fetch 是一种新的用于获取资源的技术,它被用来代替我们已经吐槽了很久的技术(XHR)。
Fetch 使用起来很简单,它返回的是一个 Promise,即使你没有 XHR 的开发经验也能快速上手。
Fetch 和 XHR 的区别
Fetch 相对 XHR 来说具有简洁、易用、声明式、天生基于 Promise 等特点。
XHR 使用方式复杂,接口繁多,最重要的一点是它的回调设计,对于实现 try...catch
比较繁琐。
但是 Fetch 也有它的不足,相对于 XHR 来说,目前它具有以下劣势:
- 不能取消(虽然 AbortController 能实现,但是目前兼容性基本不能使用,可以使用 polyfill )
- 不能获取进度
- 不能设置超时(可以通过简单的封装来模拟实现)
- 兼容性目前比较差(可以使用 polyfill 间接使用 XHR 来优雅降级,这里推荐使用 isomorphic-fetch )
在了解 Fetch 和 XHR 的一些不同后,还是需要根据自身的业务需求来选择合适的技术,因为技术没有永远的好坏,只有合不合适。
建议:在整体了解了 fetch 之后,希望同学们能够读一下 github polyfill 源码。在读代码的同时,可以同时参考 Fetch 规范。