如果"await"停止异步函数的执行,为什么我们需要多个"await"关键字?



在javascript.info中,await"暂停函数的执行,直到promise结束,然后使用promise结果继续执行"。如果是这样的话,为什么有时在一个函数中需要多个await关键字呢?

考虑下面的例子:

async function fetchdata() {
const response = await fetch("https://jsonplaceholder.typicode.com/users/")
const data = await response.json()
console.log(data)
}
fetchdata()

返回从给定URL检索到的对象数组。但是如果await真的挂起了fetchdata的执行,如果我删除第二个await关键字,我希望得到相同的返回值,因为结果const data = response.json()应该只在response解决后才运行。

然而,当我运行下面的代码时,fetchdata()返回一个未决的承诺,即response.json()response实际解决之前运行。

async function fetchdata() {
const response = await fetch("https://jsonplaceholder.typicode.com/users/")
const data = response.json()
console.log(data)
}
fetchdata()

有人能解释一下我对await关键字的误解吗?

您需要多个await语句,因为您有多个承诺。

json()方法返回一个promise(当整个请求体被读取和解析时,它将进行解析)。

这是因为fetch()返回的承诺解析了头列表何时可用。这使您可以决定下一步要做什么,而无需等待整个主体通过网络传输。

它还允许您使用body属性将body作为流处理,因此您可以在它传入时一块一块地处理非常大的响应,而不是将整个原始响应存储在内存中。

json()函数本身需要等待,因为它返回一个Promise

相关内容

最新更新