2017-06-06 573 views
0

我正在使自己成爲一個庫,它重試失敗的承諾「鏈部分」 - 我收集要調用的方法並且僅在前一次成功之後排隊下一個階段。Promise.reject()繼續使用then()而不是catch()

概念上取整 - 我的問題更根本。這是我帶着調試:

this.runningPromise 
    .then(function() { 
     return Promise.reject(); 
    }) 
//; 
//this.runningPromise 
    .then(this.promiseResolver.bind(this)) 
    .catch(this.promiseRejector.bind(this)) 
    ; 

作品,promiseRejector踢當我去掉了兩條線,不工作。 promiseResolver被調用。

找不到任何地方。 Nodejs 6.10.3與Windows,Chrome瀏覽器。

+0

鏈接不改變最初的承諾,它會返回一個新的承諾。當你在同一個'this.runningPromise'上鍊接多個'.then()'調用時,你就可以分支*控制流。 – Bergi

+0

不可接受的最佳答案。謝謝。 :) –

回答

1

如果取消註釋兩行意味着你在呼喚this.runningPromise兩次,每次它有自己的回調。

如果保留行註釋,然後它將作爲一個承諾(以及相關的回調)

更好

你應該分配的承諾,一個變量,然後你可以多次使用它。

let newPromise = this.runningPromise 
    .then(function() { 
     return Promise.reject(); 
    }); 

newPromise 
    .then(this.promiseResolver.bind(this)) 
    .catch(this.promiseRejector.bind(this)); 

通過上述代碼,您可以多次使用newPromise

0

this.runningPromise當您鏈接其他回調時不會改變,即由this.runningPromise引用的許諾從未被拒絕。所以,你必須在承諾分配給新的參考:

let something = this.runningPromise 
    .then(function() { 
     return Promise.reject(); 
    }); 

something 
    .then(this.promiseResolver.bind(this)) 
    .catch(this.promiseRejector.bind(this)); 
相關問題