订阅捕获块中的“引发新错误(errorObj)”之后,Angular 5+ GlobalErrorHandler将不会触发

时间:2018-10-31 10:43:48

标签: angular error-handling exception-handling observable custom-error-handling

我是棱角分明的。目前,我正在努力在现有的角度应用程序中实现全局错误处理。

问题:在订阅的catch块中使用throw new Error(errObj)之后,我的错误不会被抛出到全局错误处理程序中。

我做了什么?

所以我发现-可以在app.module.ts中(在提供者部分中)定义自定义错误处理程序,如下所示:

{
 provide: ErrorHandler,
 useClass: CustomErrorHandlerService
}

我的customErrorhandlerService看起来像这样:

import { ErrorHandler, Injectable} from '@angular/core';
import * as StackTrace from 'stacktrace-js';

@Injectable()
export class CustomErrorHandlerService implements ErrorHandler {

  constructor() { }

  handleError(error: any) {
    console.log('Global ErrorHandler')
    console.log('Err: ', error);
    // gonna do something, like getting stracktrace and log it to the server..
    throw error;
  }

}

如果我像这样一开始就在组件的某个方法上抛出错误:

private getPost(): void {
  throw new Error('foo'); // ofc if I throw an error right here, the rest will be unreachable code its just for show
  this.postfachService.getPostfachItems().subscribe(items => {
    this.postfachItems = items;
    this.show = true;
  }, error => {
    console.log('Err: ', error);
    throw new Error(error); // it seems that this won't work
  }
  );
}

它将错误抛出给全局错误处理程序。到目前为止还可以。 但是,如果我尝试将错误抛出给catch块中的全局处理程序,它将无法正常工作。甚至控制台也不会打印任何内容,就像错误被吞没一样。

您有个主意吗?尝试在catch块中向全局错误处理引发错误可能完全是我的错误?

致谢, 优皮

0 个答案:

没有答案