根据此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()
产生的错误处理模态解雇拒绝。
但它是如何运作的?这记录在哪里?