AngularJS中应用程序异常处理的推荐做法

Ale*_*orn 33 exception-handling angularjs

我目前正在探索在AngularJS中处理应用程序范围异常的可能方法.

我们真正想要避免的一件事是在嵌套的try/catch块中包装应用程序的多个部分,但是干净地处理事情 - 即抛出异常以响应promise.

  • 有没有人在此之前讨论过此问题并提出任何建议?
  • 有关如何获取服务中的异常以及控制器/指令的任何建议.(见下文 - 广播工作正常,但只有你可以将一个监听器附加到一个范围).

到目前为止进展

一些简短的设计目标:

  • 允许应用程序的一个部分的异常在别处处理 - 或者可能在多个地方处理(即"向用户显示错误通知","禁用小部件").
  • 提供常见错误条件的集中管理 - 即登录到服务器,向用户显示通知,重定向到登录.
  • 允许从控制器,指令,服务等抛出异常.
  • 最终允许本地化消息.

我团队目前的倾向是编写一个服务来处理异常,这会暴露一系列简单的调用:

exceptionService.warn('exception_token');

exceptionService.crit('another_exception_token');
Run Code Online (Sandbox Code Playgroud)

然后,该服务将格式化"异常"对象并从rootscope广播.这将允许默认处理程序监视任何广播并应用默认操作,并允许在其他范围中设置自定义侦听器,这可以处理更具体的条件 - 即禁用UI的一部分.

var exception = {
    token: 'exception_token',
    severity': 'crit'
};

// broadcast exception
$rootScope.$broadcast(
'application_exception',
    exception
);
Run Code Online (Sandbox Code Playgroud)

Chr*_*rós 3

您可以重写 $exceptionHandler 以便将异常传递到您自己的异常中央服务,但 $exceptionHandler 似乎只接收从控制器、指令等抛出的异常...但不接收源自 ajax 调用的异常。对于这些异常,您可以实现一个拦截器,如本页中描述的拦截器:

编辑:链接永久失效。
Archive.org 链接