尽管有 catch 块,Fetch 仍然会抛出
Fetch still throws despite having catch block
fetch('https://api.postcodes.io/postcodes/aassdd')
.then((resp) => {
console.log(resp.status);
})
.catch((e) => { console.log('ha'); });
由于某些奇怪的原因,上面的代码仍然会抛出错误并随后执行 .then
语句。有办法解决这个问题吗?
编辑:fiddle
大多数浏览器开发人员控制台通常默认记录 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'); });
fetch('https://api.postcodes.io/postcodes/aassdd')
.then((resp) => {
console.log(resp.status);
})
.catch((e) => { console.log('ha'); });
由于某些奇怪的原因,上面的代码仍然会抛出错误并随后执行 .then
语句。有办法解决这个问题吗?
编辑:fiddle
大多数浏览器开发人员控制台通常默认记录 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'); });