Angular 在引发 promise.catch 之前将错误记录到控制台
Angular logs error to console before raising promise.catch
我觉得我有点疯狂,但是即使我定义了 catch
,Angular 似乎也会为 promise 抛出一个错误。它向控制台抛出错误,然后允许 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 实现了一个违背承诺的规范?
angular 默认情况下将所有错误记录到控制台。
angular 还提供了一种覆盖此行为的方法。 $exceptionHandler
是一个全局服务,它有机会处理任何异常($http、$digest 期间的错误等)。
如果加上这段代码:
myApp.factory('$exceptionHandler', function() {
return function(exception, cause) {
exception.message += ' (caused by "' + cause + '")';
//throw exception;
};
});
然后所有错误都会停止进一步记录。虽然会处理 catch() 处理程序。已更新 fiddle:http://jsfiddle.net/5jjx5rn3/
更新:
正如评论中 dnc253
所指出的,如果您打算实际覆盖 angularjs 服务,则有更好的方法。即使不是这个问题的重点,最好知道只要简单地声明一个具有相同名称的服务,无论在哪个模块中,该服务都将被完全替换(后进获胜)。如果想围绕原始服务添加功能,decorator 是正确的选择。
我觉得我有点疯狂,但是即使我定义了 catch
,Angular 似乎也会为 promise 抛出一个错误。它向控制台抛出错误,然后允许 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 实现了一个违背承诺的规范?
angular 默认情况下将所有错误记录到控制台。
angular 还提供了一种覆盖此行为的方法。 $exceptionHandler
是一个全局服务,它有机会处理任何异常($http、$digest 期间的错误等)。
如果加上这段代码:
myApp.factory('$exceptionHandler', function() {
return function(exception, cause) {
exception.message += ' (caused by "' + cause + '")';
//throw exception;
};
});
然后所有错误都会停止进一步记录。虽然会处理 catch() 处理程序。已更新 fiddle:http://jsfiddle.net/5jjx5rn3/
更新:
正如评论中 dnc253
所指出的,如果您打算实际覆盖 angularjs 服务,则有更好的方法。即使不是这个问题的重点,最好知道只要简单地声明一个具有相同名称的服务,无论在哪个模块中,该服务都将被完全替换(后进获胜)。如果想围绕原始服务添加功能,decorator 是正确的选择。