我有一个AngularJS的代码:
service.doSomething()
.then(function(result) {
//do something with the result
});
在 AngularJS 1.5.9 中,当我在以下.then()
部分出现错误时:
service.doSomething()
.then(function(result) {
var x = null;
var y = x.y;
//do something with the result
});
我收到明确的错误消息:
TypeError:无法读取 null 的属性“y”
但在 1.6 版中使用相同的代码,我得到了一个不同的错误:
可能未处理的拒绝:{} 未定义
我知道这与此更改.catch()
有关,单个解决方案通过添加块非常简单:
service.doSomething()
.then(function(result) {
var x = null;
var y = x.y;
//do something with the result
})
.catch(console.error);
现在我又得到了我想要的:
TypeError:无法读取 null 的属性“y”
但是如何在不在.catch()
每个地方添加块的情况下为整个应用程序获得相同的结果(更详细的错误)?
我通过添加以下内容测试了建议的解决方案以禁用此功能:
$qProvider.errorOnUnhandledRejections(false);
但这样情况就更糟了——我的控制台里什么都没有!错误在某处被吞没,根本没有记录。我不确定 AngularJS 1.6 或我的配置有问题。
您对如何从 1.5.9 版“恢复”日志记录行为有任何想法吗?
编辑:
添加自定义错误处理程序:
.factory('$exceptionHandler', function($log) {
return function(exception, cause) {
$log.warn(exception, cause);
};
})
根本没有帮助。在错误处理程序中,我已经收到“包装”错误。