2014-11-21 118 views
0

假设A()返回已解决的承诺并转到B()。但是,在某些情况下,我需要B()完成并且不执行下一个()(我不想进入C()。我可以在B()方法中使用defered.reject(),但它看起来不正确。Q和承诺链接

var p = pull(target) 
.then(function (data) { 
    return A(); 
}) 
.then(function (data) { 
    return B(); 
}) 
.then(function (data) { 
    return C(); 
}) 

任何提示?

回答

5

你的方式做的承诺分支是一样的,因为它是不他们 - 通过if条件主要:

var p = pull(target) 
.then(A).then(B) 
.then(function (data) { 
    if(data) return C(); // assuming B's resolution value is a boolean 
}); 
0

如何只包裹这里面同样那么方法?

var p = pull(target) 
      .then(function(data) { 
       return A(); 
      }) 
      .then(function(data) { 
       var result = B(); 
       if (!result) 
        return C() 
       return result; 
      }) 
+0

B返回一个承诺,而不是布尔值。 – 2014-11-21 11:26:55