问题 AngularJS - 禁用$ exceptionHandler


我不希望$ exceptionHandler处理任何异常 - 我希望它们能够推进到浏览器(主要用于Visual Studio中的IE测试)。

我试过覆盖$ exceptionHandler并简单地重新抛出错误,这给了我10次迭代的$ digest错误(这是有意义的)。

我该如何完全关闭它?

编辑

不幸的是,重新抛出错误并没有解决问题 - IE只知道重新抛出的错误,而不是来自源。


11521
2017-09-12 21:19


起源

你的被覆盖的$ exceptionHandler是否与提供的类似 ngMock? - Problematic


答案:


经过一番研究,这是不可能的。 Angular捕获它们的错误,然后显式调用异常处理程序 - 在许多情况下,它不仅仅是让错误传播。


8
2017-12-09 18:02



这是angularjs最令人沮丧的部分之一。我无法理解为什么它甚至是图书馆的一部分。 - hughes


根据文件, 这是可能的:

angular.module('exceptionOverride', []).factory('$exceptionHandler', function () {
    return function (exception, cause) {
        exception.message += ' (caused by "' + cause + '")';
        throw exception;
    };
});

此示例将覆盖$ exceptionHandler的正常操作   当角度异常发生时,它们会很难发生,而不仅仅是   登录到控制台。


2
2018-01-18 22:50



谢谢mems - 这个问题是它仍然编码捕获错误并从覆盖中重新抛出它。当发生这种情况时,您将丢失原始堆栈跟踪。 - Roy Truelove


尝试将异常抛入一个 window.setTimeout (不 $timeout)延迟执行,这将允许你逃避 $digest 黑洞。但不确定它是否会保留IE中的堆栈跟踪。


1
2017-09-12 21:41



谢谢@ovmjm - 编辑了上面的问题 - Roy Truelove