gerneri c обработчик для необработанной ошибки с angular - PullRequest
0 голосов
/ 23 марта 2020

Я хочу создать обобщенный c обработчик ошибок для стороны сервера и клиента. Я столкнулся с проблемой; когда метод перехватывает ошибку, я не хочу ее перехватывать. Я использую ErrorHandler для обработки глобального события, я бы использовал его также для ошибок http-вызовов, но он не обрабатывает асинхронные вызовы, фактически он ожидает выполнения действия, а затем обрабатывает ошибку. Поэтому я использую HttpInterceptor для этого, и проблема здесь перехватывает уже обнаруженные ошибки, поэтому сообщение отображается дважды.

@Injectable()
export class ServerErrorInterceptor implements HttpInterceptor {
    constructor(private readonly injector: Injector) {
    }

    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

        return next.handle(request).pipe(
            retry(1),
            catchError((error: HttpErrorResponse) => {
                const errorService = this.injector.get(ErrorService);
                const exceptionHandlerService = this.injector.get(ExceptionHandlerService);
                let errorMessage = '';

                // server-side error
                errorMessage = errorService.getServerMessage(error);
                exceptionHandlerService.handleError(error, 'server side', errorMessage);

                return throwError(error);
            })
        );
    }
}
@Injectable()
export class GlobalErrorHandler implements ErrorHandler {
    constructor(private injector: Injector) {
    }

    handleError(error): void {
            let message: string;
            const errorService = this.injector.get(ErrorService);
            const exceptionHandlerService = this.injector.get(ExceptionHandlerService);

            if (error.error instanceof ErrorEvent) {
                // Client Error
                message = errorService.getClientMessage(error);
                exceptionHandlerService.handleError(error, 'client handler', message);
            }
    }
}
 providers: [
        {
            provide: ErrorHandler,
            useClass: GlobalErrorHandler
        },
        {
            provide: HTTP_INTERCEPTORS,
            useClass: ServerErrorInterceptor, multi: true
        },
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...