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

Javascript 在AngularJS中停止承诺链而不使用拒绝,javascript,angularjs,promise,angular-promise,Javascript,Angularjs,Promise,Angular Promise,根据这一点,可以在解析器函数中返回null,跳过承诺链中随后的处理程序。我很好奇它是如何工作的——我看不到任何一本书对这种行为的定义 对于我的用例,我修改了他们的示例来处理Angular UI引导中模式对话框服务的拒绝,该服务根据模式是关闭还是关闭来解析或拒绝: $uibModal.open({ //…模态选项 }) .结果 .catch(函数(){ //模态对话框被取消,因此使用此技巧停止承诺链 返回$q(函数(){returnnull;}); }) .然后(函数(){ //…如果对话框被取消

根据这一点,可以在解析器函数中返回
null
,跳过承诺链中随后的
处理程序。我很好奇它是如何工作的——我看不到任何一本书对这种行为的定义

对于我的用例,我修改了他们的示例来处理Angular UI引导中模式对话框服务的拒绝,该服务根据模式是关闭还是关闭来解析或拒绝:

$uibModal.open({
//…模态选项
})
.结果
.catch(函数(){
//模态对话框被取消,因此使用此技巧停止承诺链
返回$q(函数(){returnnull;});
})
.然后(函数(){
//…如果对话框被取消,则不会执行此操作
返回someAPIcall();
})
.catch(函数(){
//…使用API调用处理错误
});
这很好,因为我不必在第一个
catch
中检查错误值(
$uibModal
API使用各种字符串作为模式拒绝类型),也不必使用复杂的分支/嵌套来避免将模式拒绝拒绝的处理与
someAPIcall()产生的错误混为一谈


但是它是如何工作的呢?这篇文章记录在哪里?

那篇文章显然是错的。在任何promise规范中,都没有
返回null
来跳过所有
.then()
处理程序。也许有一些非标准的实现可以做到这一点——我不知道。而且,这篇文章明确地说它在角度上不起作用。您要么拒绝,要么返回后续
.then()
处理程序检查的特定值。这就是你如何通过承诺来控制下一步的执行。这篇博文是错误的。自己测试:。仅供参考,当对话框关闭时,您可以返回
null
,然后在下一个
处理程序中检查值是否为
null
。然后()。这就是在同步代码(使用
if
语句)中实现的方法,在异步代码中使用相同的概念。这个提琴在AngularJS中工作,仍然不确定原因:所以我想我理解发生了什么,博客和我的示例中使用$q构造函数是错误的,没有按照我的想法进行,相反,它返回的承诺永远不会拒绝或解决(永远处于
挂起
状态)。所以副作用是我看到的行为,但不是我想的那样。