У меня есть установка службы ошибок в Angular 8, которая обрабатывает все ошибки, которые исходят от компонентов, как я ожидаю - вход в консоль и не выбрасывание дополнительных ошибок.
import { Injectable, ErrorHandler } from '@angular/core'
@Injectable()
export class ErrorService implements ErrorHandler {
constructor() { }
handleError(error) {
console.error('An error occurred:', error.message);
}
}
Но в DocumentService (что-либо перечисленное в поставщиках), если выдается ошибка, она иногда go через ErrorService, но обычно она не попадает в этот код.
providers: [
ErrorService
, {
provide: ErrorHandler,
useClass: ErrorService,
}
, DocumentService
],
DocumentService внедряется в такие компоненты, как этот
export class MainComponent implements OnInit {
@ViewChild('pdfViewer', { static: false }) public pdfViewer;
@ViewChild('claimPdfViewer', { static: false }) public claimPdfViewer;
selectedElements: HTMLElement[] = [];
constructor(private documentService: DocumentService) {
...
Что мне нужно сделать, чтобы DocumentService (и все остальное в провайдерах) всегда использовал мой ErrorService или есть какой-то другой способ глобальной обработки ошибок от служб?
РЕДАКТИРОВАТЬ: Глобальный обработчик событий не достигается, только когда исключение происходит в наблюдаемой подписке или обработчике событий
this.traceService.onHighlightTrace.subscribe(traces => {
if (traces != this.documentService.searchTraces) {
this.documentService.clearAllPagesOfAllHighlights();
//exception gets thrown in this.clearAllPagesOfAllHighlights(); and there is
// no try/catch in there so I would expect the exception to get caught by the handler.
//instead exception never goes to the global error handler and just
//gets logged to the console as uncaught
....
РЕДАКТИРОВАТЬ 2: https://stackblitz.com/edit/globalerror-handler
Это повторяет событие, отсоединяемое при ошибке. Он не реплицирует глобальный обработчик событий, не обрабатывающий ошибку, хотя ....