angular - 在 Angular 应用程序中抛出错误

标签 angular exception error-handling

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

最佳答案

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

Are there any guidelines around when to throw errors in general and in particular in an Angular application?



没有指导方针。

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

  1. The input fields required by a component has not been provided.

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

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

  1. The parameters required by a function have not been provided (and specifically, in custom validators, a formControl has not been provided). These errors won't be caught as I understand it.


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

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

副作用

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

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

关于angular - 在 Angular 应用程序中抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51509403/

相关文章:

ios - 找不到 Cocos2D 文件?

angular - 如何使用angular2 material Dialog 来block for canDeactivate

java - 两次捕获异常类型

c++ 程序在一个线程发生访问冲突时终止 - 如何在 linux 中捕获此问题 - 对于 win32 我在 vs2010 中获得堆栈跟踪

java - 有没有办法在Java中记录失败的Oracle登录名的用户名?

javascript - Promise.all 错误处理——让一个 Promise 的结果在另一个 Promise 的 catch 中可访问?

javascript - 使用 Angular 7+ 找不到 Web Worker 脚本的 URL

angular - 如何对可编辑 primeng 数据表实现响应式(Reactive)表单方法

Angular 2 Http超时

java - 如果更高级别处理异常,是否应该在较低级别检查异常