【发布时间】: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");"进入我的组件的构造函数,它不会渲染组件。如果我将该代码放在组件的另一部分,则不会触发任何打字稿代码事件,并且页面已死并且什么也不做。理想情况下,如果可能的话,我希望记录错误并正常触发页面和代码事件(记录但吞下意外错误)。我意识到有时这是不可能的,但我希望用户能够在可能的情况下继续使用。