Say У меня есть следующая Promise цепь:Bluebird 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.
Я думаю, что вы должны сделать обещание отменимым * первым *, не последним. – Tomalak
Tomalak прав, вы только обещаете вернуть '.catch()' в конце отмены. Родители не могут наследовать от своих детей после факта, но дети будут наследовать от их родителей. – Esailija