Согласно этому сообщению в блоге , можно вернуть null
в функции распознавателя, чтобы пропустить последующие then
обработчики в цепочке обещаний. Мне любопытно, как это работает - ничто в спецификации Promises / A + не определяет такое поведение, которое я вижу.
Для моего варианта использования я адаптировал их пример для обработки отклонений из модальной диалоговой службы $uibModal
в Angular UI Bootstrap, которая разрешает или отклоняет в зависимости от того, закрыт модал или отклонен:
$uibModal.open({
// ... modal options
})
.result
.catch(function () {
// Modal dialog was dismissed, so use this trick to stop the promise chain
return $q(function () { return null; });
})
.then(function () {
// ... this will not get executed if dialog was dismissed
return someAPIcall();
})
.catch(function () {
// ... handle errors with API call
});
Это хорошо, потому что мне не нужно проверять значение ошибки (API $uibModal
использует различные строки для типов модальных отклонений) в первом catch
или использовать сложное ветвление / вложение, чтобы избежать смешивания обработки модальных отказ от увольнения с ошибками someAPIcall()
.
Но как это работает? Где это задокументировано?