首页 > 解决方案 > Fetch API:如何判断一个错误是否是网络错误

问题描述

所以我有一些这样的代码:

async function getData() {
  const response = await fetch(/* ... */);
  const json = await response.json();
  return transform(json);
}

哪里transform可以抛出一些自己的错误。


我试图从fetchAPI 中捕获网络错误。

try {
  const data = await getData();

  // ...
  return // ...
} catch (e) {
  if (isNetworkError(e)) {
    return localStorage.getItem('...');
  }

  throw e;
}

我的问题是如何实现isNetworkError跨浏览器的工作?注意:这应该只在网络离线时返回 true。

似乎 chrome 和 firefox 都抛出了 a TypeError,但它们的消息各不相同。

标签: javascriptfetch-api

解决方案


如果第一个 Promise 被拒绝,那就是网络错误。那是它唯一的一次。

即使响应是 HTTP 404 或 500,从 fetch() 返回的 Promise 也不会拒绝 HTTP 错误状态。相反,它将正常解析(将 ok 状态设置为 false),并且只会拒绝网络故障或如果有任何事情阻止请求完成。

来自 Mozilla 开发者页面: https ://developer.mozilla.org/en-US/docs/Web/API/Fetch_API


推荐阅读