Я создаю приложение Ioni c. Я часто использую asyn c await с моими обещаниями.
Я сделал этот общий обработчик ошибок
import { ErrorHandler } from '@angular/core';
export class AppErrorHandlerService extends ErrorHandler {
constructor(
) { super(); }
handleError(err: any): void {
this.displayLogs(err);
}
displayLogs(error: any): void{
console.error(error);
console.error(error.stack);
}
}
И я сделал это, чтобы проверить его [в случайном файле]
throwError(): void{
throw new Error("voluntary error");
}
async throwAsyncError(): Promise<void>{
await this.createFailingPromise();
}
async createFailingPromise(): Promise<any>{
return await new Promise((_, reject) => {
reject("voluntary async error")
});
}
Как и ожидалось, все мои ошибки отлавливаются в этом обработчике. напечатанный стек важен, когда я вызываю 'throwError'. Но когда я вызываю 'throwAsyncError', я получаю эту неактуальную трассировку стека
Error: Uncaught (in promise): voluntary async error
at resolvePromise ([project_path]\node_modules\zone.js\dist\zone.js:831:1)
at [project_path]\node_modules\zone.js\dist\zone.js:741:1
at rejected ([project_path]\node_modules\tslib\tslib.es6.js:69:88)
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke ([project_path]\node_modules\zone.js\dist\zone.js:391:1)
at Object.onInvoke ([project_path]\node_modules\@angular\core\fesm2015\core.js:21825:1)
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke ([project_path]\node_modules\zone.js\dist\zone.js:390:1)
at Zone.push../node_modules/zone.js/dist/zone.js.Zone.run ([project_path]\node_modules\zone.js\dist\zone.js:150:1)
at [project_path]\node_modules\zone.js\dist\zone.js:889:1
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask ([project_path]\node_modules\zone.js\dist\zone.js:423:1)
at Object.onInvokeTask ([project_path]\node_modules\@angular\core\fesm2015\core.js:21816:1)
Есть ли способ получить правильную трассировку стека (без добавления .catch ко всем моим обещаниям)?