为什么 .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 数据,您可以使用以下命令技巧:
fetch(url) .then(response => response.json()) .then(data => { console.log(response.status, data.title); });
const response = await fetch(url); const data = await response.json(); console.log(response.status, data.title);
请记住在阅读正文之前验证响应状态,因为它可能并不总是包含JSON 数据。
以上是为什么 `fetch().then().json()` 有时返回 Promise,有时不返回?的详细内容。更多信息请关注PHP中文网其他相关文章!