如何在Promise.all()中根据参数值条件性执行Promise?
优雅实现条件性并行Promise执行
可以通过构建候选Promise数组并过滤无效项的方式,完全避免显式的if-else分支,实现需求:
简洁版实现
Promise.all([ var1 !== null && promise1(var1), var2 !== null && promise2(var2) ].filter(Boolean));
原理说明
- 利用逻辑与
&&的短路特性:当var1 !== null为真时,表达式返回promise1(var1)的实例;为假时返回false filter(Boolean)会自动过滤数组中的假值(false、null、undefined等),只保留有效的Promise实例- 如果
var1和var2都为null,Promise.all会接收空数组并直接resolve,符合预期
高扩展性版实现
如果后续需要添加更多条件Promise,这种写法可读性和扩展性更强:
// 定义任务列表:每个任务包含执行条件和执行函数 const promiseTasks = [ { shouldRun: var1 !== null, run: () => promise1(var1) }, { shouldRun: var2 !== null, run: () => promise2(var2) } ]; // 过滤出需要执行的任务并调用执行函数,最后并行执行 Promise.all( promiseTasks .filter(task => task.shouldRun) .map(task => task.run()) );
内容的提问来源于stack exchange,提问作者tazmin32w
相关产品推荐
相关产品推荐

