Kye*_*ica 6 promise angularjs angular-promise
我觉得我有点疯狂,但即使我有一个catch定义,Angular似乎也会为一个承诺抛出错误.它将错误抛出到控制台,然后允许catch运行.
这是一个超级简单的小提琴
测试代码:
$q.when(1)
.then(function() {
throw new Error("test");
}).catch(function(error) {
console.log('error caught', error);
});
Run Code Online (Sandbox Code Playgroud)
结果控制台
(肮脏的骗子!)
这是一个小提示,显示了我期望发生的事情:catch被引发,并且没有其他错误记录到控制台.我是否未能配置某些内容,或者Angular是否实施了破坏的承诺规范?
默认情况下,将所有错误记录到控制台.
angular还提供了一种覆盖此行为的方法.$exceptionHandler是一个全局服务,有机会处理任何异常($ http,$摘要期间的错误等).
如果你添加这段代码:
myApp.factory('$exceptionHandler', function() {
return function(exception, cause) {
exception.message += ' (caused by "' + cause + '")';
//throw exception;
};
});
Run Code Online (Sandbox Code Playgroud)
然后所有错误都会停止进一步记录.但是会处理catch()处理程序.更新小提琴:http://jsfiddle.net/5jjx5rn3/
更新:
正如dnc253评论中所指出的,如果您打算实际覆盖angularjs服务,那么有更好的方法.即使不是这个问题的焦点,最好知道简单地声明一个具有相同名称的服务,无论在哪个模块中,服务都被完全替换(最后获胜).如果想要在原始服务周围添加功能,装饰器是正确的选择.
| 归档时间: |
|
| 查看次数: |
1712 次 |
| 最近记录: |