如何让多个异步函数并行执行且全部完成后再运行后续代码
你可以通过JS内置的Promise.all()方法实现需求,修改后的代码如下:
async function functionName() { try { // 直接调用三个异步函数,会同时启动执行,不会互相等待 const task1 = function1() const task2 = function2() const task3 = function3() // 等待三个任务全部执行完成后再往下走 await Promise.all([task1, task2, task3]) // 也可以直接合并为一行写法: // await Promise.all([function1(), function2(), function3()]) // 如果需要获取三个函数的返回值,可以按顺序接收: // const [result1, result2, result3] = await Promise.all([function1(), function2(), function3()]) //some more awaits below this point } catch(err) { console.log(err) } }
补充说明:
- 不要在调用
function1/function2/function3的时候单独加await,否则会退化为串行执行,只有把三个未完成的Promise实例一起传入Promise.all才会实现并行效果。 Promise.all的特性是所有传入的Promise全部成功才会返回结果数组,只要有一个任务抛出错误,就会直接进入catch块,符合你现有代码的异常处理逻辑。- 如果你需要即使某一个任务执行失败,也能拿到其他成功任务的结果,可以改用
Promise.allSettled(),它会等待所有任务结束(无论成功失败)后返回每个任务的状态和结果,你可以自行判断处理。
内容的提问来源于stack exchange,提问作者nickcoding2
相关产品推荐
相关产品推荐

