angularjs – 在提升promise.catch之前,Angular将错误记录到控制
发布时间:2020-12-17 07:12:39 所属栏目:安全 来源:网络整理
导读:我觉得我有点疯狂,但是即使我定义了一个捕获,Angular似乎也会为一个承诺抛出错误.它将错误抛出到控制台,然后允许catch运行. 这是一个super-simple fiddle 测试代码: $q.when(1) .then(function() { throw new Error("test"); }).catch(function(error) { co
我觉得我有点疯狂,但是即使我定义了一个捕获,Angular似乎也会为一个承诺抛出错误.它将错误抛出到控制台,然后允许catch运行.
这是一个super-simple fiddle 测试代码: $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还提供了一种覆盖此行为的方法. $exceptionHandler是一个全局服务,有机会处理任何异常($http,$digest期间的错误等). 如果你添加这段代码: myApp.factory('$exceptionHandler',function() { return function(exception,cause) { exception.message += ' (caused by "' + cause + '")'; //throw exception; }; }); 然后所有错误都会停止进一步记录.但是会处理catch()处理程序.更新小提琴:http://jsfiddle.net/5jjx5rn3/ 更新: 正如评论中dnc253所指出的那样,如果您打算实际覆盖angularjs服务,那么有更好的方法.即使不是这个问题的焦点,最好知道简单地声明一个具有相同名称的服务,无论在哪个模块中,服务都被完全替换(最后获胜).如果想要在原始服务周围添加功能,decorator是正确的选择. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |