了解 Fetch() 中的 Promise 处理
使用 JavaScript 的 fetch() API 时,使用 .json 时可能会出现一种意外行为() 方法。本文深入探讨了为什么 .json() 在某些情况下返回 Promise,而在其他情况下则不然。
为什么 Promise 行为不同
.json() 方法会触发Promise 对象检索响应正文并将其解析为 JSON。这是因为 HTTP 响应的正文无法立即可用。因此, .json() 方法返回一个 Promise,该 Promise 在正文可用时解析。
但是,如果 Promise 对象直接从 .then() 处理程序返回,例如:
fetch(url) .then(response => response.json())
返回值不会是 Promise。 Promise 不会无限期地包装在 .then() 处理程序中。相反,返回底层值,允许异步操作链继续。
通过返回的 Promise 进行值访问
相反,如果 Promise 对象嵌入在返回的对象,例如:
fetch(url) .then(response => { return { data: response.json(), status: response.status } })
.then() 处理程序的返回值将保留为 承诺。这是因为创建了一个新的 JavaScript 对象,并且在其范围内调用 .json() 方法。生成的 Promise 被分配给返回对象的 data 属性。
替代方法
要在一个 .then() 处理程序中访问响应状态和 JSON 数据,可以使用以下方式:
结论
理解 .json() 方法的 Promise 行为以及它如何与 .then() 处理程序交互对于有效的异步至关重要使用 fetch() API 进行编程。通过利用 Promises 提供的灵活性,开发人员可以确保高效处理 HTTP 响应并避免不必要的异步操作嵌套。
以上是为什么 fetch().then().json() 有时返回 Promise,有时不返回?的详细内容。更多信息请关注PHP中文网其他相关文章!