Javascript 如何在我的Ionic应用程序中捕获异常?

Javascript 如何在我的Ionic应用程序中捕获异常?,javascript,angularjs,ionic-framework,ionic,Javascript,Angularjs,Ionic Framework,Ionic,我试图在我的Ionic应用程序中捕获异常,以便在日志处理程序中记录它们,但我尝试过的方法似乎都不起作用 我通过引用未定义的变量触发异常。我可以看到异常被捕获并记录在JavaScript控制台中,但我找不到任何方法在我的应用程序中得到通知 首先,我尝试了window.onerror,如下所示: window.onerror = function(message, url, lineNumber, columnNumber, error) { log.error('caught javasc

我试图在我的Ionic应用程序中捕获异常,以便在日志处理程序中记录它们,但我尝试过的方法似乎都不起作用

我通过引用未定义的变量触发异常。我可以看到异常被捕获并记录在JavaScript控制台中,但我找不到任何方法在我的应用程序中得到通知

首先,我尝试了window.onerror,如下所示:

window.onerror = function(message, url, lineNumber, columnNumber, error) {
    log.error('caught javascript exception: ' + message + ' at ' + url + ' ' + lineNumber + ':' + columnNumber);
    return true;
};
我没听懂。然后我尝试重写$exceptionHandler,如下所述:。以下是我的代码:

angular.module('exceptionOverride', []).factory('$exceptionHandler', function() {
    return function(exception, cause) {
        log.error('angular exception: ' + exception.message + ' (caused by ' + cause + ')');
    };
});
不幸的是,这也不起作用。在这两种情况下,我仍然看到异常被记录在JavaScript控制台中,但不是由我的处理程序记录的

为了完整起见,以下是当异常被记录到我的控制台(使用爱奥尼亚的实时更新运行,
爱奥尼亚运行android-c-l-s
)时的情况:

40 499948错误引用错误:未定义x
在EquipAdminController.vm.causeeException上(http://192.168.2.194:8100/js/bundle.js:1336:44)
fn时(评估时)(http://192.168.2.194:8100/lib/ionic/js/ionic.bundle.js:21972:15), :2:265)
在http://192.168.2.194:8100/lib/ionic/js/ionic.bundle.js:55803:11
在范围内。$eval(http://192.168.2.194:8100/lib/ionic/js/ionic.bundle.js:24673:28)
在范围内。$apply(http://192.168.2.194:8100/lib/ionic/js/ionic.bundle.js:24772:23)
在HTMLButtonElement.listener(http://192.168.2.194:8100/lib/ionic/js/ionic.bundle.js:55802:15)
在Object.triggerEvent[作为触发器](http://192.168.2.194:8100/lib/ionic/js/ionic.bundle.js:811:15)
at Object.touchspire[作为处理程序](http://192.168.2.194:8100/lib/ionic/js/ionic.bundle.js:2005:14)
在Object.detect(http://192.168.2.194:8100/lib/ionic/js/ionic.bundle.js:1389:30)
at Object.startDetect(http://192.168.2.194:8100/lib/ionic/js/ionic.bundle.js:1363:12)

我遗漏了什么?

可能是您的处理程序的问题。。你能告诉我更多关于你的手吗?不是我的手。如果我将log.error()调用替换为console.log(),我仍然看不到消息。我看不到正在将
log
注入此异常处理程序模块。angularjs提供了
$log
而不是
log
,我通过在angular的$log中添加一个装饰器找到了一个解决方法。这使我能够截获大多数(所有?)异常的$log.error调用。这不完全是我想要的,但它似乎有效。你可以把它作为一个答案,它将帮助未来的读者可能是你的处理程序的问题。。你能告诉我更多关于你的手吗?不是我的手。如果我将log.error()调用替换为console.log(),我仍然看不到消息。我看不到正在将
log
注入此异常处理程序模块。angularjs提供了
$log
而不是
log
,我通过在angular的$log中添加一个装饰器找到了一个解决方法。这使我能够截获大多数(所有?)异常的$log.error调用。这不完全是我想要的,但它似乎有效。你可以把它作为一个答案,它将帮助未来的读者
40    499948   error    ReferenceError: x is not defined
at EquipAdminController.vm.causeException (http://192.168.2.194:8100/js/bundle.js:1336:44)
at fn (eval at <anonymous> (http://192.168.2.194:8100/lib/ionic/js/ionic.bundle.js:21972:15), <anonymous>:2:265)
at http://192.168.2.194:8100/lib/ionic/js/ionic.bundle.js:55803:11
at Scope.$eval (http://192.168.2.194:8100/lib/ionic/js/ionic.bundle.js:24673:28)
at Scope.$apply (http://192.168.2.194:8100/lib/ionic/js/ionic.bundle.js:24772:23)
at HTMLButtonElement.listener (http://192.168.2.194:8100/lib/ionic/js/ionic.bundle.js:55802:15)
at Object.triggerEvent [as trigger] (http://192.168.2.194:8100/lib/ionic/js/ionic.bundle.js:811:15)
at Object.touchGesture [as handler] (http://192.168.2.194:8100/lib/ionic/js/ionic.bundle.js:2005:14)
at Object.detect (http://192.168.2.194:8100/lib/ionic/js/ionic.bundle.js:1389:30)
at Object.startDetect (http://192.168.2.194:8100/lib/ionic/js/ionic.bundle.js:1363:12)