【问题标题】:Handling JavaScript errors with window.onerror使用 window.onerror 处理 JavaScript 错误
【发布时间】:2016-06-17 20:46:37
【问题描述】:

我正在尝试处理我的错误,但不幸的是我没有成功。

在我的 AngularJS 应用程序“运行”中,我编写了以下代码:

window.onerror = function (msg, url, line, col, error) {
    alert('error');
};
$timeout(() => errorrr);

虽然我确实在控制台上看到了错误:

ReferenceError: errorrr 未定义

我没有收到警报...


如果我在应用程序的“运行”之外执行相同的代码,它就可以工作。

为什么/我该如何解决?


编辑 使用角度,我无法到达 $rootScope

angular.module('app').factory('$exceptionHandler', function ($log, $rootScope) {
    return function myExceptionHandler(exception, cause) {
        $log.error(exception, cause);
        $rootScope.errors.push({
            exception: exception,
            cause: cause
        });
    };
});

它抛出

找到循环依赖:$rootScope

有没有办法在这个工厂中获取 $rootscope?

【问题讨论】:

  • AngularJs 有自己的错误处理程序。见the documentation for $exceptionHandler
  • @MikeMcCaughan 已编辑,使用了 $exceptionHandler,但我无法从中调用 $rootscope。有什么想法吗?
  • 听起来你在问一个不同的问题......我只是注意到为什么window.onerror 没有发现你产生的错误。如果您有新问题,请先在互联网和 Stack Overflow 上搜索答案,然后,如果您没有找到任何答案,请提出新问题。

标签: javascript angularjs


【解决方案1】:

正如对该问题的评论中所建议的,最好使用 Angular 自己的 $exceptionHandler

要解决循环注入的问题,我需要使用$injector 服务,如下所示:

angular.module('app').factory('$exceptionHandler', function ($log, $injector) {
    return function myExceptionHandler(exception, cause) {
        $log.error(exception, cause);
        var $rootScope = $injector.get('$rootScope');
        $rootScope.errors.push({
            string: exception.toString(),
            message: exception.message,
            lineNumber: exception.lineNumber,
            stack: exception.stack,
            cause: cause
        });
    };
});

【讨论】:

    猜你喜欢
    • 2018-12-18
    • 1970-01-01
    • 2014-12-21
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 2012-02-07
    • 1970-01-01
    相关资源
    最近更新 更多