我觉得我有点疯狂,但即使我定义了catch
,Angular似乎也会对一个承诺产生错误。它将错误抛给控制台,然后允许catch
运行。
测试代码:
$q.when(1)
.then(function() {
throw new Error("test");
}).catch(function(error) {
console.log('error caught', error);
});
生成的控制台
(肮脏的骗子!)
以下是a fiddle showing what I expect to happen:引发了catch
,并且没有其他错误记录到控制台。我没有配置某些东西,或者Angular是否实现了破坏的承诺规范?
答案 0 :(得分:7)
angular会将所有错误记录到控制台。
angular还提供了一种覆盖此行为的方法。 $exceptionHandler
是一个全局服务,有机会处理任何异常($ http,$摘要期间的错误等)。
如果你添加这段代码:
myApp.factory('$exceptionHandler', function() {
return function(exception, cause) {
exception.message += ' (caused by "' + cause + '")';
//throw exception;
};
});
然后所有错误都会停止进一步记录。但是会处理catch()处理程序。更新了小提琴:http://jsfiddle.net/5jjx5rn3/
更新:
正如评论中dnc253
指出的那样,如果您打算实际覆盖angularjs服务,那么更好的方法。即使不是这个问题的焦点,最好知道简单地声明一个具有相同名称的服务,无论在哪个模块中,服务都被完全替换(最后获胜)。如果想要在原始服务周围添加功能,decorator是正确的选择。