如何在两个异步函数执行完成后调用第三个函数?
如何在两个异步函数执行完成后调用第三个函数?
嗨,你提的这个问题用 Promise(包括你已经在写的 async/await)就是最适合的解决方案啦!我给你分两种常见情况讲讲具体怎么处理:
情况一:两个异步函数可以并行执行(互相不依赖)
如果get_func1和get_func2谁先完成都不影响,那用Promise.all()让它们同时跑会更高效,不用等第一个执行完才启动第二个,能节省不少时间。代码可以这么写:document.addEventListener('DOMContentLoaded', async () => { // 把两个异步任务放进Promise.all,等两者都完成再往下走 const [data1, data2] = await Promise.all([get_func1(), get_func2()]); // 现在两个函数都执行完毕,直接调用func3就行,还能把拿到的数据传过去 func3(data1, data2); });这里要注意:
Promise.all会等所有任务都成功才继续,如果其中一个异步函数抛出错误,整个Promise.all会立刻失败,你可以根据需求加 try/catch 来处理异常。情况二:第二个异步函数依赖第一个的执行结果
要是get_func2必须等get_func1拿到数据后才能执行(比如需要把data1作为参数传给它),那你现在的写法其实已经没问题了,只要在两个await之后直接调用func3就好:document.addEventListener('DOMContentLoaded', async () => { let data1 = await get_func1(); // 比如这里需要用data1作为参数传给get_func2 let data2 = await get_func2(data1); // 两个函数都执行完成啦,调用func3 func3(data1, data2); });
其实你用的 async/await 本身就是 Promise 的语法糖,本质上还是用 Promise 来管理异步流程的,这完全是处理这类问题的最佳实践,放心用就好~
备注:内容来源于stack exchange,提问作者mHelpMe
相关产品推荐
相关产品推荐

