如果请求失败(400),新的js fetch API将失败:
fetch(uri).catch(function(err) {
console.log(err);
});
当发生这种情况时,真的没有办法获得响应机构吗?例如检查错误代码。
编辑:我创建了一个js小提琴:https://jsfiddle.net/4x4xLwqo/调用这个mockbin端点:http://mockbin.org/bin/d87acbb0-526e-4d66-aea4-b827d9c35031/view编辑2:更新了jsfiddle以使用更好的端点:https://jsfiddle.net/4x4xLwqo/2/
答案 0 :(得分:10)
fetch
将不会进入catch
。您可以使用常规then
处理该问题。
来自MDN:
当遇到网络错误时,
fetch()
承诺将拒绝TypeError
,但这通常意味着权限问题或类似问题 - 例如,404不会构成网络错误。准确检查成功的fetch()
将包括检查承诺是否已解决,然后检查Response.ok
属性的值是否为真。
以及来自MDN的附带示例:
fetch('flowers.jpg').then(function(response) {
if(response.ok) {
response.blob().then(function(myBlob) {
var objectURL = URL.createObjectURL(myBlob);
myImage.src = objectURL;
});
} else {
console.log('Network response was not ok.');
}
})
.catch(function(error) {
console.log('There has been a problem with your fetch operation: ' + error.message);
});