当前代码:
async testFn(){
const arr = [1,2,3,4,5]
arr.forEach(async (i) =>{
await this.timeFn(i)
})
console.log('finish')
}
timeFn(num) {
return new Promise((resolve) => {
setTimeout(()=>{
console.log('定时器', num)
resolve()
}, 1000)
})
}
问题:上面代码会先打印‘finish’,在输出定时器内打印信息
需求:arr循环结束后再执行后面语句
解决:
方法(1)将foreach修改为for in (同步执行)
for(let i in arr)
await this.timeFn(i)
}
方法(2)使用Promise.all搭配map (异步执行)
await Promise.all(arr.map(async i=> await this.t(i)))