我想使用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()
吗?
答案 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) );