假设我有以下的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()
“修复”了这个问题。我不理解的是为什么?
为什么原始方法不起作用?
我正在使用bluebird 2.3.11。
.catch()
返回的 Promise 可取消。父级无法事后从其子级继承可取消性,但子级将从其父级继承可取消性。 - Esailija