javascript - 如何捕获 fetch 的 then() 中的 json 文本

标签 javascript ecmascript-6 promise fetch-api

这就是我调用fetch的方式

fetchOpts = {...}
return fetch(url, fetchOpts)
    .then(checkStatus)

即使在错误情况下,我调用的 url 也将始终返回 json 数据:

{error_message:"Encountered issue with update"
status:"error",
status_code:400}

我想获取 error_message 字段值并将其传递给 Error 构造函数。

在 checkStatus 内部,它以这种方式处理异常:

function checkStatus(response) {
  let error = null;

  if (!response.headers.get('Content-Type').includes('application/json')) {
    error = new Error(response.statusText);
    error.response = response;
    throw error;
  }

  if (response.status >= 200 && response.status < 300) {
    return response;
  }

  if (response.ok) {
    return response;
  }
  const jsonData = response.json() ; // <- `jsonData` is a promise
  error = new Error(/* How to extract error_message from json data? */);
  error.response = response;
  throw error;
}

我已经检查过这个问题,但它并没有真正满足我的需求 fetch: Reject promise with JSON error object 。此外,根据评论,接受的答案似乎并不能完全解决OP的问题。

最佳答案

我可能误解了这个问题,但是 error_message 成员是作为 Promise 返回的数据对象的属性公开的,对吗?所以看来你可以这样做:

response.json()
.then(jsonData => {
  if (jsonData.error_message) {
    error = new Error(jsonData.error_message)
  }
}

关于javascript - 如何捕获 fetch 的 then() 中的 json 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43268862/

相关文章:

javascript - 如何定义const函数javascript(语法糖)?

javascript - 使用node.js、nodeunit 和 ES6/Harmony

javascript - 无法从文本框中获取用户输入来更改 Javascript 中的框背景颜色

javascript - 纯文本和单行 contenteditable div

javascript - 有没有关于 Google App Maker 语法的正式文档?

javascript - 从中继器打印元素

javascript - 设置 ES6 默认参数以处理空字符串

javascript - 锯齿事务处理器不工作

javascript - 如何使用 puppeteer 抓取多个页面

javascript - Bluebird 递归 promise 未得到解决/履行