【发布时间】:2015-02-13 06:37:25
【问题描述】:
假设我有以下 Promise 链:
var parentPromise = Promise.resolve()
.then(function () {
var condition = false;
if (condition) {
return parentPromise.cancel('valid reason');
} else {
return Promise.resolve()
.then(function () {
var someOtherCondition = true;
if (someOtherCondition) {
console.log('inner cancellation');
return parentPromise.cancel('invalid reason');
}
});
}
})
.catch(Promise.CancellationError, function (err) {
console.log('throwing');
if (err.message !== 'valid reason') {
throw err;
}
})
.cancellable();
上面永远不会进入catch。
如果我们将condition 交换为true,则永远不会触发内部取消,但仍然不会触发catch。
删除最后的.cancellable,并将parentPromise.cancel() 的所有实例替换为显式throw new Promise.CancellationError()“修复”问题。我不明白为什么?
为什么原来的方法不起作用?
我使用的是蓝鸟 2.3.11。
【问题讨论】:
-
我认为您必须首先而不是最后一个取消承诺。
-
Tomalak 是对的,你只是让
.catch()最后返回的承诺可以取消。事后父母不能从孩子那里继承可取消性,但孩子会从父母那里继承可取消性。
标签: javascript promise future bluebird