2014-11-21 211 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