【问题标题】:Fetch still throws despite having catch block尽管有 catch 块,Fetch 仍然抛出
【发布时间】:2017-07-25 04:42:07
【问题描述】:
fetch('https://api.postcodes.io/postcodes/aassdd')
  .then((resp) => {
    console.log(resp.status);
  })
  .catch((e) => { console.log('ha'); });

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

编辑:fiddle

【问题讨论】:

  • 它似乎没有投掷。您可能只是看到控制台记录了 404 请求错误吗?
  • 404 Not Found 并不是真正会被捕获的错误。
  • @AlexanderO'Mara in jsfiddle 如果您打开控制台,它不会显示获取错误吗?
  • @adeneo 有什么办法可以绕过它吗?

标签: javascript promise fetch


【解决方案1】:

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

您在此处看到错误并不意味着抛出了可捕获的 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'); });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 2018-09-17
    • 1970-01-01
    相关资源
    最近更新 更多