我是棱角分明的。目前,我正在努力在现有的角度应用程序中实现全局错误处理。
问题:在订阅的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块中向全局错误处理引发错误可能完全是我的错误?
致谢, 优皮