循环里面使用异步函数

113 阅读1分钟

循环里面使用异步函数,如何等所有的异步函数都执行完再进行下一步

常见的一种错误的实现方式 如下

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('最后执行')
    })
}