10

如果请求失败(400),新的 js fetch API会导致 promise 失败:

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/

4

1 回答 1

10

fetchcatch如果遇到 HTTP 错误,将不会进入。你可以用普通的then.

来自MDN

当遇到网络错误时, fetch()promise 将拒绝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);
});
于 2015-10-16T15:37:50.777 回答