Глобальный обработчик ошибок в провайдере и сервисах - PullRequest
3 голосов
/ 05 февраля 2020

У меня есть установка службы ошибок в 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

Это повторяет событие, отсоединяемое при ошибке. Он не реплицирует глобальный обработчик событий, не обрабатывающий ошибку, хотя ....

...