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

Promise.reject() continues with then() instead of catch()

我正在使自己成为一个重试失败承诺的库 "chain-parts" - 我收集要调用的方法并仅在上一个成功后才将下一阶段排队。

从概念上讲 - 我的问题更根本。这是我调试的地方:

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
当您链接其他回调时,

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));

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

如果您对行进行注释,那么它将作为一个承诺(和关联的回调)

最好将 promise 分配给一个变量,然后你可以多次使用它。

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

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

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