Promise.All 有条件地等待承诺

Promise.All conditionally await promises

我有一个异步函数列表,每个函数都有一个条件,当且仅当满足相应条件时才应调用该函数,我想 运行 所有函数并行。示例:

await Promise.all([asyncFunc1(), asyncFunc2(), ...]) 

当且仅当满足相应条件:cond1cond2、...时,才应调用列表中的每个函数。这样做的最佳方法是什么?

我想到了这个非常简单的解决方案:

const promiseList = []
if(cond1) promiseList.push(asyncFun1())
if(cond2) promiseList.push(asyncFun2())
...
await Promise.all(promiseList)

将您的条件放入数组中,并用它过滤函数列表:

const conditions = [cond1, cond2, cond3, cond4]
const functions = [asyncFunc1, asyncFunc2, () => asyncFunc3(foo), bar.asyncFunc4.bind(bar, baz)]

await Promise.all(
  functions
    .filter((_, i) => conditions[i])
    .map(fn => fn())
)

将参数传递给您的异步函数(或保留它们的 this 上下文)、.bind 它们或将它们包装在其他函数中。