【问题标题】:Create centralized exception handling to recover from unhandled exceptions创建集中式异常处理以从未处理的异常中恢复
【发布时间】:2017-03-29 15:27:45
【问题描述】:

我正在尝试在 Angular 2 中创建集中式异常处理(对于所有代码,而不仅仅是 Observables),这样如果出现未处理的错误,它不会使应用程序崩溃,而是会记录它。目前,当出现未处理的异常并且我必须重新加载它时,我的应用程序变得无响应。我创建了一个错误处理程序,如下所示:

import { NgModule, ErrorHandler } from '@angular/core';

export class AppErrorHandler implements ErrorHandler
{
    rethrowError = false;

    handleError(error: any)
   {

   }
}

未处理的错误确实转到handleError(),但似乎在我的应用程序停止工作时被重新抛出。请帮忙。

【问题讨论】:

  • 如果你实现 ErrorHandler 你需要覆盖/实现call 函数,它可能类似于call(error, stackTrace = null, reason = null)。还要检查我的答案中的提供者部分。
  • 您好,bhantol,感谢您的回答。我已经有你在下面显示的提供部分。错误成功到达 handleError 函数。问题是它仍然破坏了我的应用程序。如果可能,我希望记录错误并继续。
  • 您可能想要描述一个场景,从而定义崩溃的含义。 “崩溃”会发生什么以及您不希望发生的事情会进一步提供帮助。
  • 在抛出的情况下,您始终可以捕获它并执行您需要在 catch 块中执行的操作。您可以设置 $scope.errors 并且可能会向用户显示错误。如果您想全局执行此操作,则可以有一个外部范围,您可以在其中设置错误对象。
  • 如果为了测试,我把"throw new Error("hello");"进入我的组件的构造函数,它不会渲染组件。如果我将该代码放在组件的另一部分,则不会触发任何打字稿代码事件,并且页面已死并且什么也不做。理想情况下,如果可能的话,我希望记录错误并正常触发页面和代码事件(记录但吞下意外错误)。我意识到有时这是不可能的,但我希望用户能够在可能的情况下继续使用。

标签: angular error-handling


【解决方案1】:

使用provide 获取您的异常处理程序。

providers: [{provide: ErrorHandler, useClass: AppErrorHandler}]

【讨论】:

    【解决方案2】:

    我的问题类似于this post

    我认为答案是除了重新加载页面/应用程序之外,没有办法从未处理的异常中恢复。正如 Günter Zöchbauer 所说:

    一般情况下,异常处理应尽可能靠近 因为当有办法恢复时。

    【讨论】:

      猜你喜欢
      • 2013-04-05
      • 2016-08-03
      • 2011-03-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 2011-11-19
      • 1970-01-01
      相关资源
      最近更新 更多