Пользовательский обработчик ошибок ioni c теряет трассировку стека с обещаниями - PullRequest
0 голосов
/ 22 января 2020

Я создаю приложение 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 ко всем моим обещаниям)?

...