研究了 axios 和 ES6 fetch 的文档,我发现两者非常相似,并且受到 $.ajax 及其缩写的强烈影响。
axios 的主要优点是浏览器支持。
那么如果我使用 babel-polyfill - 没有理由使用 axios,我是对的吗?
原文由 Sasha Kos 发布,翻译遵循 CC BY-SA 4.0 许可协议
研究了 axios 和 ES6 fetch 的文档,我发现两者非常相似,并且受到 $.ajax 及其缩写的强烈影响。
axios 的主要优点是浏览器支持。
那么如果我使用 babel-polyfill - 没有理由使用 axios,我是对的吗?
原文由 Sasha Kos 发布,翻译遵循 CC BY-SA 4.0 许可协议
这个:
fetch('https://jsonplaceholder.typicode.com/posts', {
method: 'POST',
body: JSON.stringify({
title,
body
})
}).then((res) => {
if (res.ok) {
return res.json()
}
throw new Error(res.responseText);
})
.then((data) => console.log(data))
.catch((err) => console.log(err))
基本上可以用 axios 来表达:
axios.post('https://jsonplaceholder.typicode.com/posts', {
title,
body
}).then((data) => console.log(data))
.catch((err) => console.log(err))
所以本质上:
res.json()
, res.text()
等res.ok
以捕获实际承诺中的非 200 状态错误 catch
处理程序。总体而言 axios
提供更高级别和简单的 api 来处理请求。
原文由 Karen Grigoryan 发布,翻译遵循 CC BY-SA 4.0 许可协议
13 回答12.9k 阅读
7 回答2.1k 阅读
3 回答1.3k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
6 回答1.1k 阅读
2 回答1.3k 阅读✓ 已解决
使用 Axios 而不是 Fetch 的几个原因:
这更多是 XMLHttpRequest(支持 axios)或 Fetch API 之间的问题。
Fetch API 目前不提供任何方式来获取请求进度通知,例如,该功能支持大文件上传的反馈机制。
另一方面,Axios 内置了这个功能:
当您的后端返回
500 Internal Server Error
响应代码时,fetch
不会将其与200 OK
区别对待。在大多数情况下,这会带来不便,因为您之前对响应的所有假设都不再有效。
大多数情况下,当从服务器收到错误响应时,您希望尽快中止处理管道,并切换到错误处理案例。
这并不难实现,但您可能希望在某种抽象下捕获此逻辑以避免重复,这使我们更接近 Web API 抽象,即 Axios。
如果响应返回错误状态,Axios 会做一些理智的事情并拒绝承诺。与 axios 的大多数事情一样,这种行为是可定制的。
axios 有 moxios ,fetch 有 fetch-mock 。
这两个库都很棒,但根据我的经验,
fetch-mock
需要额外的设置才能让 Jest 使用 mocked fetch 而不是 polyfilled 库。我也喜欢
moxios.wait()
返回一个承诺,该承诺将在匹配请求后得到解决。例如,您可以配置一个拦截器,它将 api 密钥添加到所有请求参数,或监视活动请求以显示加载屏幕。
使用一个选项而不是另一个选项的原因可能因实际要求和便利性而异。
如果您需要监控进度,请使用 Axios(或 XMLHttpRequest)。
如果您正在编写服务工作者,请使用 Fetch。
否则,使用对您来说更方便的方法。