在 Angular 应用程序中抛出错误

Posted

技术标签:

【中文标题】在 Angular 应用程序中抛出错误【英文标题】:Throwing errors in Angular application 【发布时间】:2019-01-01 17:06:03 【问题描述】:

关于何时抛出一般错误,特别是在 Angular 应用程序中,是否有任何指导方针? 我正在考虑的用例: 1. 未提供组件所需的输入字段。 2. 未提供函数所需的参数(具体而言,在自定义验证器中,未提供 formControl)。 据我了解,这些错误不会被捕获。

【问题讨论】:

【参考方案1】:

您的问题主要基于意见。没有规则说明您是否应该使用例外。所以我什至不能说这个答案是正确的。

关于何时抛出一般错误,特别是在 Angular 应用程序中,是否有任何指导方针?

没有指导方针。

Angular 有办法让您通过 ErrorHandler 类来监听未处理的错误,但抛出错误没有限制。

    未提供组件所需的输入字段。

@Input() 注释没有必需的标志,但我希望它有。

是否抛出异常取决于您,但很难知道是否设置了绑定。您可以检查属性的值或检查是否从未调用过 NgOnChange。

    未提供函数所需的参数(具体而言,在自定义验证器中,未提供 formControl)。据我了解,这些错误不会被捕获。

与所有未处理的错误一样,它们会被转发到 ErrorHandler。您在课堂上几乎无法实际处理错误。

如果需要参数,则抛出错误告诉程序员他们做错了什么。

副作用

如果您在 Angular 生命周期钩子(这是大多数组件方法)期间抛出未处理的错误,则可能会破坏 Angular。应用程序很可能会进入不可恢复的状态。

根据我的经验,最佳实践是在 Observables 中抛出错误,并在其他任何地方尽可能优雅地处理不良数据。 Observables 似乎是 Angular 中唯一的错误安全域,因为我从未在 Observable 崩溃 Angular 中看到未处理的错误。

【讨论】:

以上是关于在 Angular 应用程序中抛出错误的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 Angular 单元测试错误:“在 afterAll\n[object ErrorEvent] 中抛出了一个错误”

Jasmine:期望在异步函数中抛出错误

http.put 在使用 Chrome 但不是 IE 的 Angular 2 / Web API 中抛出错误

如何在可观察的地图中抛出错误(rxjs 6,ng6)

模拟 Observable 以在 Jest 中抛出错误

sql 在简单查询中抛出错误