Javascript 如何在Promise.all()中使用if表达式?

Javascript 如何在Promise.all()中使用if表达式?,javascript,promise,ecmascript-6,Javascript,Promise,Ecmascript 6,我想使用Promise.all()来处理两个Promise对象,但第二个是内部的if表达式。如何处理这种情况 看起来是这样的: functionA(); if(true) { functionB(); } function()和functionB()都返回承诺对象。在正常情况下,我可以使用 Promise.all([ functionA(), functionB() ]).then(resule => { console.log(result[0])

我想使用
Promise.all()
来处理两个Promise对象,但第二个是内部的
if
表达式。如何处理这种情况

看起来是这样的:

functionA(); 

if(true) {
    functionB(); 
}
function()
functionB()
都返回承诺对象。在正常情况下,我可以使用

Promise.all([
    functionA(),
    functionB()
]).then(resule => {
    console.log(result[0]);  // result of functionA
    console.log(result[1]);  // result of functionB
})

但是如何处理
if
表达式呢?我应该将
if(true){functionB()}
包装在
newpromise()
中吗?

好的,如果您使用承诺作为值的代理,您可以使用
if
s,或者您可以将承诺嵌套一个级别-就我个人而言-我更喜欢使用它们作为代理。请允许我解释:

var p1 = functionA();
var p2 = condition ? functionB() : Promise.resolve(); // or empty promise
Promise.all([p1, p2]).then(results => {
      // access results here, p2 is undefined if the condition did not hold
});
或类似地:

var p1 = functionA();
var p2 = condition ? Promise.all([p1, functionB()]) : p1; 
p2.then(results => {
     // either array with both results or just p1's result.
});

新承诺中包装条件是应该避免的。

在我的例子中,我有多个条件

Promise.all([ cond==true ? p1 : '', p2])
 functionA(); 
 if(condition1) {
  functionX(); 
 }else if (condition2) {
  functionY(); 
 }....
所以我做了下面的事情

const promises = [];
promises.push(functionA());
if (condition1) promises.push(functionX());
else if (condition2) promises.push(functionY());
......

Promise.all(promises).then((results) => console.log('results', results) );

正如
Promise.all()
将同化值和承诺一样,第一个解决方案中的
Promise.resolve()
可以是一个值,这是在未调用
functionB()
时插入默认值的一种廉价方法。我同意调用Promise.resolve()是没有用的。直接传递默认值,例如null或未定义。根据doc,传递值而不是承诺是有效的:这并不能提供问题的答案。一旦你有足够的钱,你将能够;相反我已经搜索了相同的问题,上面的答案解决了我的问题,因此发布。这可能对他们有帮助。声誉在这里很重要吗?。