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
。
我正在使自己成为一个重试失败承诺的库 "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.3this.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
。