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

时间:2015-12-25 11:17:29

标签: javascript promise ecmascript-6

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

看起来像这样:

functionA(); 

if(true) {
    functionB(); 
}

functionA()functionB()都返回一个promise对象。在正常情况下,我可以使用

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

但是如何处理if表达式?我应该将if(true){functionB()}包裹在new Promise()吗?

3 个答案:

答案 0 :(得分:2)

好吧,如果你使用promises作为值的代理,你可以使用if,或者你可以将promise放在一个级别 - 个人 - 我更喜欢使用它们作为它们的代理。请允许我解释一下:

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.
});

new Promise中包含条件是https://github.com/troolee/gridstack.js,应该避免使用。

答案 1 :(得分:1)

Promise.all([ cond==true ? p1 : '', p2])

答案 2 :(得分:1)

就我而言,我有多个条件

 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) );