在AngularJS中不使用拒绝来停止承诺链

时间:2018-05-16 22:45:47

标签: javascript angularjs promise angular-promise

根据此blog post,可以在解析程序函数中返回null以跳过promise链中的后续then个处理程序。我很好奇它是如何工作的 - Promises/A+ spec中的任何内容都没有定义我能看到的这种行为。

对于我的用例,我调整了他们的示例来处理Angular UI Bootstrap中$uibModal模态对话服务的拒绝,该服务根据模态是关闭还是解除而解析或拒绝:

$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
});

这很好,因为我不必在第一个$uibModal中检查错误值(catch API使用各种字符串作为模态拒绝类型)或使用复杂的分支/嵌套来避免混合由someAPIcall()产生的错误处理模态解雇拒绝。

但它是如何运作的?这记录在哪里?

0 个答案:

没有答案