javascript - 尽管有 catch block ,但 fetch 仍然会抛出异常

标签 javascript promise fetch

fetch('https://api.postcodes.io/postcodes/aassdd')
  .then((resp) => {
    console.log(resp.status);
  })
  .catch((e) => { console.log('ha'); });

出于某种奇怪的原因,上面的代码仍然会抛出错误并随后执行 .then 语句。有办法解决这个问题吗?

编辑:fiddle

最佳答案

大多数浏览器开发者控制台通常默认记录 404 错误,有些可能或可以配置为记录所有请求。

Console screenshot

您在此处看到错误并不意味着抛出了可捕获的 JavaScript 异常,除了 JavaScript 控制台日志和抛出异常之外,浏览器控制台还显示其他内容。

您无法在代码中执行任何操作来阻止此错误出现在控制台中,但某些控制台可以让您隐藏控制台中的这些请求。

此外,fetch 不会对 404 等典型错误响应代码抛出错误。这是为了使其更加灵活,让您决定是否仍然需要该内容,即使它是404 响应代码。

如果您想在非 200 状态代码上抛出错误,您可以这样做:

fetch('https://api.postcodes.io/postcodes/aassdd')
  .then((resp) => {
    if (resp.status !== 200) {
        throw new Error('Invalid status code: ' + resp.status);
    }
  })
  .catch((e) => { console.log('ha'); });

关于javascript - 尽管有 catch block ,但 fetch 仍然会抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45289441/

相关文章:

javascript - 带循环的 Deferred 和 Promise

javascript - 链接 promise ,但在失败时继续下一个 promise (并记录拒绝)

wpf - WPF中通过Uid获取对象

javascript - 我们必须为哪些地方和哪些元素提供唯一 key ?

javascript - 托米 :upload Meteor package 503 service unavailable error

node.js - 如何在 Promise.all 中将 URL 中的数组作为参数传递

asynchronous - 如何在 AbortController.abort() 之后启动另一个请求?

javascript - 在 javascript 中遇到有关 bootstrap-alert.js 的错误

javascript - 如何克隆具有给定类名的元素

reactjs - 使用 React Native 和 useEffect 获取