Как обрабатывать глобальные ошибки до / во время запуска приложения в рамках обещания Aurelia / Bluebird
Я добавляю обработку ошибок 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
Обработчик в моем индексном файле не вызывается. Также Аврелии внутренние ConsoleAppender.Error
не вызывается, так как я думаю, что он не настроен / активирован на этом этапе.
Следование стека в инструментах разработчика приводит меня к этому коду...
function tryCatcher() {
try {
var target = tryCatchTarget;
tryCatchTarget = null;
return target.apply(this, arguments);
} catch (e) {
errorObj.e = e;
return errorObj;
}
}
... который, я думаю, исходит от Bluebird
...
Как я могу надежно отловить все ошибки в моем приложении?
Вот скриншот зарегистрированной ошибки:
vendor-bundle.js:3411
приводит кtryCatcher
упомянутое вышеapp-bundle.js:72:9
(1-я запись в stacktrace) приводит к фактической строке ошибкиblah.this = 3
- Bluebirds
unhandledRejection
&rejectionHandled
события не происходят в этом сценарии...