首页 >web前端 >js教程 >为什么 `fetch().then().json()` 有时返回 Promise,有时不返回?

为什么 `fetch().then().json()` 有时返回 Promise,有时不返回?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-11 14:19:11401浏览

Why Does `fetch().then().json()` Sometimes Return a Promise and Sometimes Not?

为什么 .json() 返回 Promise,但通过 .then() 则不返回 Promise?

问题:
使用 Fetch API 时,观察到 .json() 方法返回在 .then() 处理程序的对象文字中使用时的 Promise 对象。但是,当不使用对象字面量时,它会直接返回值。

答案:

关于 Promises:

.json() 返回一个 Promise,因为当标头可用时会收到 HTTP 响应,但正文(在本例中, JSON) 尚未加载。 .json() 检索正​​文的第二个 Promise,该 Promise 必须单独加载。

关于 .then() 行为:

当从 a 返回 Promise 时.then() 回调,被外链采用。这意味着外部 .then() 将收到内部 Promise 的已实现值。在给定的示例中,外部 .then() 接收具有 data 和 status 属性的对象,有效地使 data 属性直接在 .then() 中可用。

替代解决方案:

要在一个 .then() 处理程序中直接访问状态和 JSON 数据,您可以使用以下命令技巧:

  • 使用嵌套的 .then() 块:
fetch(url)
  .then(response => response.json())
  .then(data => {
    console.log(response.status, data.title);
  });
  • 使用 async/await (需要异步函数):
const response = await fetch(url);
const data = await response.json();
console.log(response.status, data.title);

请记住在阅读正文之前验证响应状态,因为它可能并不总是包含JSON 数据。

以上是为什么 `fetch().then().json()` 有时返回 Promise,有时不返回?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn