尽管有阻挡,但仍然会引发抓取

时间:2017-07-24 20:25:23

标签: javascript promise fetch

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

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

修改:fiddle

1 个答案:

答案 0 :(得分:1)

大多数浏览器开发人员控制台默认情况下通常会记录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'); });