如何在Aurelia / Bluebird承诺的应用程序启动之前/期间处理全局错误

时间:2017-03-31 10:45:57

标签: error-handling promise aurelia bluebird raygun.io

我已将Raygun错误处理添加到我的Aurelia应用程序中,并意识到我无法捕获应用程序设置期间发生的错误(例如在main.configure内)。

这里的代码根本没有使用Raygun,只是试图捕获所有错误:

的index.html

<!DOCTYPE html>
<html>
<head>
    <!-- ... -->
</head>

<body aurelia-app="main">
<script src="build/res/vendor-bundle.js" data-main="aurelia-bootstrapper"></script>
<script type="text/javascript">
    window.onerror = function() {
        console.info('arguments:', arguments);
    }
</script>
</body>
</html>

main.ts

// ...
export function configure(aurelia: Aurelia) {
    aurelia.use
        .standardConfiguration()
        .feature('resources');

    // ...

    blah.this = 3; // <-- Force some error...
}

错误记录在控制台中,但我的索引文件中的onerror处理程序未被调用。此外,Aurelias内部ConsoleAppender.Error未被调用,因为我猜它在此阶段未配置/激活。

在开发工具中跟踪堆栈跟踪后,我将看到这段代码......

function tryCatcher() {
    try {
        var target = tryCatchTarget;
        tryCatchTarget = null;
        return target.apply(this, arguments);
    } catch (e) {
        errorObj.e = e;
        return errorObj;
    }
}

...我猜这来自Bluebird ...

如何可靠地捕获应用中的所有错误?

以下是已记录错误的屏幕截图:

enter image description here

  • vendor-bundle.js:3411会导致上面提到的tryCatcher
  • app-bundle.js:72:9(stacktrace中的第一个条目)导致实际错误行blah.this = 3
  • 蓝鸟unhandledRejection&amp;在此方案中,rejectionHandled events未被解雇...

0 个答案:

没有答案