循环里面使用异步函数,如何等所有的异步函数都执行完再进行下一步
常见的一种错误的实现方式 如下
const arr = [1,2,3]
const asyncExc = (value)=>{
return new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log(value)
resolve('success')
},1000)
})
}
const test = ()=>{
arr.forEach(async(item)=>{
await asyncExc(item)
})
console.log('最后执行')
}
正确实现方式
const arr = [1,2,3]
const asyncExc = (value)=>{
return new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log(value)
resolve('success')
},1000)
})
}
const test = ()=>{
Promise.all(arr.map(async(item)=>{
await asyncExc(item)
})).then(()=>{
console.log('最后执行')
})
}