以下是我的情况
if abc is true
call async func1, func2
else
call async func1
function test(): Q.Promise<boolean> {
if(abc)
Q.all([func1,func2])
else
Q.all([func1])
//if failed throw reject reason all the way in the chain
}
if
和else
子句来完成,是否有更好的方式有条件地调用promise?error from any one of the promises
?答案 0 :(得分:1)
我会将promises放在数组中,并根据条件添加新的:
function test(): Q.Promise<Boolean[]> {
const promises = [func1()]
if (abc) promises.push(func2())
return Q.all(promises)
}
我稍微更正了类型签名,因为Q.all
使用 array 值(在您的情况下为布尔值)从每个基础承诺中解析。您还需要致电func1
和func2
。最后,不要忘记从test
函数返回。
答案 1 :(得分:0)
你实际上已经非常接近了:
function test() {
if(abc)
return Q.all([func1(),func2()])
else
return func1();
}
test().then(() => {
// do whatever
}).catch(err => console.log(err));
确保你总是退还承诺,因为它们不会被链接。