在条件逻辑的基础上调用Q Promise

时间:2016-08-24 10:16:49

标签: node.js promise q

以下是我的情况

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
}
  1. 如图所示,可以使用ifelse子句来完成,是否有更好的方式有条件地调用promise?
  2. 如何退回error from any one of the promises

2 个答案:

答案 0 :(得分:1)

我会将promises放在数组中,并根据条件添加新的:

function test(): Q.Promise<Boolean[]> {
    const promises = [func1()] 
    if (abc) promises.push(func2()) 
    return Q.all(promises)
}

我稍微更正了类型签名,因为Q.all使用 array 值(在您的情况下为布尔值)从每个基础承诺中解析。您还需要致电func1func2。最后,不要忘记从test函数返回。

答案 1 :(得分:0)

你实际上已经非常接近了:

function test() {
    if(abc)
       return Q.all([func1(),func2()])
    else
       return func1();
}
test().then(() => {
    // do whatever
}).catch(err => console.log(err));

确保你总是退还承诺,因为它们不会被链接。