为什么我的全局错误处理程序在我的Angular应用程序中被调用两次?

时间:2017-12-20 02:49:50

标签: angular error-handling

我有这个简单的全局错误处理程序,它源于角ErrorHandler。现在无论错误的位置如何,初始处理都会进行两次,或者至少是这样的。我的控制台第一次记录两次相同的错误,如果错误仍然存​​在,那么作为单打,有什么原因吗?

import { ErrorHandler, Injectable, Injector } from "@angular/core";
import { Router } from '@angular/router';
@Injectable()
export class ArtCoreErrorHandler implements ErrorHandler {

  constructor(private injector: Injector) { }

  handleError(error) {
    console.log(error)
    const message = error.message ? error.message : error.toString();
    if (message == 'JWT must have 3 parts') {
      router.navigate(['/']).then(
        () => alert('wrong'),
      );
      location.reload();
    }
    throw error;
  }
}

并在我的app module

 providers: [
    {provide: ErrorHandler, useClass: ArtCoreErrorHandler},
    MDBSpinningPreloader,
.........]

1 个答案:

答案 0 :(得分:4)

如果由于Observable失败而引发错误,例如说通过HttpClient发出的HTTP请求失败,则可能是您预订了两次Observable。多个订阅将导致多个错误,即使可观察到的源仅引发一次错误。

在此示例中:

let obs = this._http.get('https://i-do-not-exist.test').pipe(share());
obs.subscribe(() => {})
obs.subscribe(() => {})

HTTP请求将仅运行一次,但是全局错误处理程序将引发并捕获2个错误。

查看此StackBlitz