我正在等待async.eachLimit完成后再继续。
我的代码:
await async.eachLimit(myList, async (item)=>{
await processItem(item)
})
console.log("all done");
但我总是在处理完所有事情之前就把"全部做完"。我做错了什么?
我最终解决了这个问题:
await new Promise( (resolve, reject)=>{
async.eachLimit(myList, async (item)=>{
await processItem(item)
}, (err)=> {
if(err) reject(err)
else resolve()
})
问题是,由于某种原因,async.eachLimit没有返回一个不可用的承诺。
您可以尝试Promise.all()
,它返回一个promise,该promise只有在列表中的所有promise都已解析时才能解析。
await Promise.all(myList);
console.log("done");
也许您可以根据自己的需要进行调整(使用1000而不是Math.rrandom…来更快地运行示例(。
const test = async () => {
const list = [ 1, 2, 3 ]
const testFunc = async (item) => {
return new Promise( ( res, rej ) => {
setTimeout( () => {
console.log(item)
res( true )
}, 1000)
} )
}
await Promise.all( list.map( async ( item ) => {
await testFunc( item )
} ) )
console.log("all done")
}
test()