2017-06-06 40 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)); 
相关问题