我有一些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);
})()
])
答案 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
时,没有办法绕过这些额外的函数,因为函数内部的执行总是顺序的。