javascript - Fetch API:如何判断一个错误是否是网络错误
问题描述
所以我有一些这样的代码:
async function getData() {
const response = await fetch(/* ... */);
const json = await response.json();
return transform(json);
}
哪里transform
可以抛出一些自己的错误。
我试图从fetch
API 中捕获网络错误。
try {
const data = await getData();
// ...
return // ...
} catch (e) {
if (isNetworkError(e)) {
return localStorage.getItem('...');
}
throw e;
}
我的问题是如何实现isNetworkError
跨浏览器的工作?注意:这应该只在网络离线时返回 true。
似乎 chrome 和 firefox 都抛出了 a TypeError
,但它们的消息各不相同。
- 火狐:
TypeError: "NetworkError when attempting to fetch resource."
- 铬合金:
TypeError: Failed to fetch
解决方案
如果第一个 Promise 被拒绝,那就是网络错误。那是它唯一的一次。
即使响应是 HTTP 404 或 500,从 fetch() 返回的 Promise 也不会拒绝 HTTP 错误状态。相反,它将正常解析(将 ok 状态设置为 false),并且只会拒绝网络故障或如果有任何事情阻止请求完成。
来自 Mozilla 开发者页面: https ://developer.mozilla.org/en-US/docs/Web/API/Fetch_API
推荐阅读
- testing - QA 阶段的新提交
- javascript - 如何一次滚动一个服务部分,同时将 .service-inner 元素保持在同一个位置?
- php - 如何从地址字符串中提取城市州邮政编码?
- angular - 将我的 Angular 项目更新为 Angular 7 时出错
- sql - 使用相同 WHERE 子句的 SELECT 和 UPDATE 之间的不同结果
- jenkins-pipeline - 如何部署到 OpenShift 中的通用主机名?
- angular - Angular 元素与 Angular 库?
- php - PHP:如何阻止对音频文件的直接 URL 访问,但仍允许登录用户查看但不能下载?
- java - 客户端 服务器 java 套接字
- c++ - 使getline检查输入文件的第二行和第三行