异步等待Promise.all与链

时间:2017-11-07 09:33:25

标签: javascript asynchronous

我有一些promise函数,我想做一个promise.all on async await。但是,当其中一个链中存在'then'链时,我不知道该怎么做。

例如。

Promise.all([
    promiseFn1(),
    promiseFn2().then(promiseFn3)
])

如果在promiseFn2()内链接Promise.all,我将如何实现异步等待?

我正在考虑制作一个annoynmous函数,但不愿意:

await Promise.all([
   promise1.fn(),
   (() =>{ 
       p2response = await promise2Fn(); 
       return promise3Fn(p2response);
   })()
])

1 个答案:

答案 0 :(得分:4)

是的,立即执行的async函数表达式可以执行此操作:

await Promise.all([
    promise1.fn(),
    (async () => promise3Fn(await promise2Fn()) )()
])

但是我建议继续使用更简单的.then()电话。它并不像强迫你在任何地方使用await ......

或者,如果您正在寻找干净的代码(并且then链并不像示例中那么简单,但涉及函数表达式),只需使用命名的辅助函数:

async function promise2and3fn() {
    return promise3Fn(await promise2Fn());
}
await Promise.all([
    promise1.fn(),
    promise2and3fn()
])

当你想同时使用await时,没有办法绕过这些额外的函数,因为函数内部的执行总是顺序的。