Promise.reject()继续then()而不是catch()

时间:2017-06-06 11:32:43

标签: node.js promise browserify es6-promise

我正在使自己成为一个重试失败的承诺“链部分”的库 - 我收集要被调用的方法,并且只有在之前的成功之后才排队下一阶段。

概念上的四舍五入 - 我的问题更为根本。这是我到达调试的地方:

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

作品,promiseRejector开始。当我取消注释这两行时,不行。 promiseResolver被召唤。

什么都找不到。在Windows,Chrome上使用browserify的Nodejs 6.10.3。

2 个答案:

答案 0 :(得分:2)

如果取消注释两行意味着您每次调用this.runningPromise两次并且每次都有自己的回调。

如果您对这些行进行了注释,那么它将充当一个承诺(以及相关的回调)

更好的是,您应该为变量分配承诺,然后您可以多次使用它。

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

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

使用上述代码,您可以多次使用newPromise

答案 1 :(得分:0)

当你链接其他回调时,

this.runningPromise不会改变,即this.runningPromise引用的承诺从未被拒绝。因此,您必须将 new 承诺分配给新的参考:

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

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