Остановить цепочку обещаний без использования отклонения в AngularJS - PullRequest
0 голосов
/ 17 мая 2018

Согласно этому сообщению в блоге , можно вернуть 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().

Но как это работает? Где это задокументировано?

...