gpt4 book ai didi

javascript - 为什么 Body.json() 返回一个 Promise?

转载 作者:行者123 更新时间:2023-12-03 23:50:14 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Why does .json() return a promise?

(6 个回答)



Why is the response object from JavaScript fetch API a promise?

(2 个回答)


4年前关闭。




我从 JS 开始,实际上喜欢异步方面(来自 Python),但我不确定为什么有些函数会返回 Promise。具体来说,以下代码使用 fetch让我想知道 json() 返回了什么:

fetch('https://freegeoip.net/json/8.8.8.8')
.then((response) => {
return response.json()
})
.then((json) => {
Object.keys(json).forEach((key) => {
console.log("got " + key)
})
})


除了流式传输,我们在 GET 之后得到的 HTTP 响应是一个文本 block ,稍后由客户端解释以提取标题、正文和其他有趣的元素 - 作为 HTTP 内容分析的一部分。

关键是这个文本 block 是一体的,所以第一个 then()已经有完整的响应 - 为什么解析 JSON 正文是一个异步操作,不同于 forEach在第二个 then() ?

换句话说,为什么我不能让以下代码工作?

fetch('https://freegeoip.net/json/8.8.8.8')
.then((response) => {
Object.keys(response.json()).forEach((key) => {
console.log("got " + key)
})
})


注意:如果第一个代码没有正确运行(使用 ERR_BLOCKED_BY_CLIENT),请尝试禁用您的广告拦截器。第二个是故意不正确的。

最佳答案

您的第二个片段不起作用,因为 response.json()又名 body.json() 不会立即解决。

这是因为 body.JSON() streamsreturns一个 Response 使用 Promise 异步;然后必须由 then() 捕获回调以读取/操作。

这就是 Promises 的本质。 .

然而,这样的句法流仍然可以通过利用 async 来实现。 await .

fetch('https://freegeoip.net/json/8.8.8.8')
.then(async (response) => {
Object.keys(await response.json()).forEach((key) => {
console.log("got " + key)
})
})

关于javascript - 为什么 Body.json() 返回一个 Promise?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47882645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com