承诺.所有人都有条件地等待承诺



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

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传递给它们,或将它们封装在其他函数中。

最新更新