是否真的没有办法从失败的js获取请求中获取响应主体?

时间:2015-10-16 15:31:53

标签: javascript fetch-api

如果请求失败(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/

1 个答案:

答案 0 :(得分:10)

如果遇到HTTP错误,

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);
});