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

标签 angular error-handling

我有这个简单的全局错误处理程序,它源自 Angular 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;
  }
}

在我的应用模块

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

最佳答案

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

在这个例子中:

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

HTTP 请求只会运行一次,但会抛出 2 个错误并被全局错误处理程序捕获。

查看此 StackBlitz

关于angular - 为什么我的全局错误处理程序在我的 Angular 应用程序中被调用两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47898101/

相关文章:

css - 如何在表单上动态设置 'was-validated' 类以在提交后显示带有 Angular 5 的验证反馈消息

javascript - 如何将 JSON 导出到 CSV 或 Excel - Angular 2

python - Qt CSS 错误处理

bash - Bash 中是否有 TRY CATCH 命令

file - .htaccess |您是否必须在每个目录中为每个错误安装htaccess,还是在根目录中仅安装一个?

angular - 如何找到哪些组件存在冲突?

angular - 将过滤器与 withLatestFrom 组合时无用的服务器调用

python - 为什么 Django 在升级到 v2.2 后发送重复的错误消息?

c++ - vector 分配崩溃

Angular 如何使 [formControl] 成为可选字段