gpt4 book ai didi

javascript - 使用包含异步等待的数组 foreach 等待

转载 作者:行者123 更新时间:2023-12-01 15:51:19 25 4
gpt4 key购买 nike

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





Using async/await with a forEach loop

(33 个答案)


6 个月前关闭。




在 node.js 中,我需要使用 function procesMultipleCandidates ()其中包含 Array.foreach 进程将每个元素插入数据库。但是整个函数应该在完成所有插入操作后返回响应
JavaScript 代码

async function procesMultipleCandidates (data) {
let generatedResponse = []
await data.forEach(async (elem) => {
try {

// here candidate data is inserted into
let insertResponse = await insertionInCandidate(elem)
//and response need to be added into final response array
generatedResponse.push(insertResponse)
} catch (error) {
console.log('error'+ error);
}
})
console.log('complete all') // gets loged first
return generatedResponse // return without waiting for process of
}
如上所述,最后一个返回语句不等待 foreach执行首先完成。

最佳答案

使用Array.prototype.mapPromise.all :

async function procesMultipleCandidates (data) {
let generatedResponse = []
await Promise.all(data.map(async (elem) => {
try {
// here candidate data is inserted into
let insertResponse = await insertionInCandidate(elem)
// and response need to be added into final response array
generatedResponse.push(insertResponse)
} catch (error) {
console.log('error'+ error);
}
}))
console.log('complete all') // gets loged first
return generatedResponse // return without waiting for process of
}

或使用 for/of 如果您不希望循环运行,则循环 concurrently :
async function procesMultipleCandidates (data) {
let generatedResponse = []
for(let elem of data) {
try {
// here candidate data is inserted into
let insertResponse = await insertionInCandidate(elem)
// and response need to be added into final response array
generatedResponse.push(insertResponse)
} catch (error) {
console.log('error'+ error);
}
}
console.log('complete all') // gets loged first
return generatedResponse // return without waiting for process of
}

关于javascript - 使用包含异步等待的数组 foreach 等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51738684/

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