Promise.All 有条件地等待 Promise

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

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

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


动漫人物
浏览 79回答 2
2回答

慕田峪7331174

我想出了这个非常简单的解决方案: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它们或将它们包装在其他函数中。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript