特点
- 现代浏览器支持(非IE)
- 语法简洁,更加语义化
- 基于标准Promise实现,支持async/await
- 同构方便,使用isomorphic-fetch
- 更加底层,提供的API丰富(request, response)
- 与Ajax不同的是,脱离了XHR,它的API不是事件机制,而采用Promise方式处理
- 在默认情况下 fetch不会接受或者发送cookies
- fetch()返回的promise将不会拒绝http的错误状态,即使响应是一个HTTP 404或者500
- 尽管是原生,但是不封装,却不能满足使用要求
缺点
封装后,需要解决的问题
- fetch只对网络请求报错,对400,500都当做成功的请求,服务器返回 400,500 错误码时并不会 reject,只有网络错误这些导致请求不能完成时,fetch 才会被 reject。
- fetch默认不会带cookie,需要添加配置项: fetch(url, {credentials: 'include'})
- fetch不支持abort,不支持超时控制,使用setTimeout及Promise.reject的实现的超时控制并不能阻止请求过程继续在后台运行,造成了流量的浪费
- fetch没有办法原生监测请求的进度,而XHR可以
总结
axios既提供了并发的封装,也没有fetch的各种问题,而且体积也较小,当之无愧现在最应该选用的请求的方式。
文档
https://developer.mozilla.org/zh-CN/docs/Web/API/Fetch_API/Using_Fetch
网友评论