javascript - 获取 : Reject promise with JSON error object

标签 javascript promise es6-promise fetch-api

我有一个 HTTP API,它在成功和失败时都返回 JSON 数据。

失败示例如下所示:

~ ◆ http get http://localhost:5000/api/isbn/2266202022 
HTTP/1.1 400 BAD REQUEST
Content-Length: 171
Content-Type: application/json
Server: TornadoServer/4.0

{
    "message": "There was an issue with at least some of the supplied values.", 
    "payload": {
        "isbn": "Could not find match for ISBN."
    }, 
    "type": "validation"
}

我想在我的 JavaScript 代码中实现的是这样的:

fetch(url)
  .then((resp) => {
     if (resp.status >= 200 && resp.status < 300) {
       return resp.json();
     } else {
       // This does not work, since the Promise returned by `json()` is never fulfilled
       return Promise.reject(resp.json());
     }
   })
   .catch((error) => {
     // Do something with the error object
   }

最佳答案

 // This does not work, since the Promise returned by `json()` is never fulfilled
return Promise.reject(resp.json());

好吧,resp.json promise 实现,只有Promise.reject 不等待它并立即拒绝带着 promise

我假设您更愿意执行以下操作:

fetch(url).then((resp) => {
  let json = resp.json(); // there's always a body
  if (resp.status >= 200 && resp.status < 300) {
    return json;
  } else {
    return json.then(Promise.reject.bind(Promise));
  }
})

(或者,明确地写成)

    return json.then(err => {throw err;});

关于javascript - 获取 : Reject promise with JSON error object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29473426/

相关文章:

javascript - 如何查看 Promise 的当前状态?

angular - Observable.subscribe() 与带有 async/await 的 Promise

javascript - 为什么 javascript promise 不在 for 循环中异步?

javascript - 我的 javascript 有问题

javascript - 禁用输入框的编辑部分

javascript - 在 PHP 中裁剪图像 - html2Canvas 复制 Google Charts 文本

javascript - 如何查看 Internet Explorer 的 javascript 生成的 html?

node.js - TypeScript 等待 Promise.all 并返回结果

javascript - 在异步代码中运行同步代码 - promise

node.js - 如何一个接一个地运行相同的 promise NodeJs