gpt4 book ai didi

javascript - 为什么 Array.map Array.forEach 异步操作需要 Promise.all?

转载 作者:行者123 更新时间:2023-12-03 07:17:30 25 4
gpt4 key购买 nike

我正在使用 NodeJS (ExpressJS) 服务器,有以下代码:

let caseScore = 0
await questions.map(async q => {
caseScore += await q.grade() // Queries database and gets questions, finds score
}))
console.log(caseScore)
>> Output: 0

但是,似乎 q.grade() 在请求完成后执行完毕。我在 q.grade 中放置了一个 console.log(),它会在发送响应后显示。显然这是异步执行的。所以后来我这样做了:

let caseScore = 0
await Promise.all(questions.map(async q => {
caseScore += await q.grade() // Queries database and gets questions, finds score
})))
console.log(caseScore)
>> Output: 2

它工作得很好。有人可以向我解释为什么需要 Promise.all 吗?此外,如果我将 .map 切换为 .forEach,Promise.all 错误,那么对 .forEach 执行此操作的正确方法是什么?

最佳答案

您必须等待所有异步调用完成。这就是为什么需要 promise.all 的原因。

它将一组 promise 转换为单个 promise 。

关于javascript - 为什么 Array.map Array.forEach 异步操作需要 Promise.all?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61697918/

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