• 售前

  • 售后

热门帖子
入门百科

Angular处理未可知非常错误的方法详解

[复制链接]
123457294 显示全部楼层 发表于 2021-10-25 19:29:46 |阅读模式 打印 上一主题 下一主题
写在前面


代码写得再好,始终都无法完整的处理惩罚全部可能产生非常,特别是生产环境中的应用,很大一部分是数据来自用户、远程,很难包管全部数据都按程序规定的产生。事实上,除非测试人员发现大概客户报告,否则都无法得知。因此,将应用产生的未可知非常进而上报黑白常告急的环节。
Angular 默认环境下也提供了全局的非常管理,当发生非常时,会把它扔到 Console 控制台上。假如你在使用 NG-ZORRO 时,可能常常就会遇到 ICON 未加载的非常消息,这也是非常消息的一种:
  1. core.js:5980 ERROR Error: [@ant-design/icons-angular]:the icon setting-o does not exist or is not registered.
  2. at IconNotFoundError (ant-design-icons-angular.js:94)
  3. at MapSubscriber.project (ant-design-icons-angular.js:222)
  4. at MapSubscriber._next (map.js:29)
  5. at MapSubscriber.next (Subscriber.js:49)
  6. at RefCountSubscriber._next (Subscriber.js:72)
  7. at RefCountSubscriber.next (Subscriber.js:49)
  8. at Subject.next (Subject.js:39)
  9. at ConnectableSubscriber._next (Subscriber.js:72)
  10. at ConnectableSubscriber.next (Subscriber.js:49)
  11. at CatchSubscriber.notifyNext (innerSubscribe.js:42)
复制代码
而 Angular 是通过 ErrorHandler 统一管理非常消息,而且只需要覆盖此中的 handleError 方法并重新处理惩罚非常消息即可。
ErrorHandler


首先创建一个 custom-error-handler.ts 文件:
  1. import { ErrorHandler, Injectable } from '@angular/core';
  2. @Injectable()
  3. export class CustomErrorHandler extends ErrorHandler {
  4. handleError(error: any): void {
  5. super.handleError(error);
  6. }
  7. }
复制代码
CustomErrorHandler 可以完整的获取当前用户数据、当前非常消息对象等,并允许通过 HttpClient 上报给后端。
以下是 NG-ALAIN 的文档站,由于是使用 Google Analytics 来分析,只需要将非常消息转给 onerror 即可:
  1. import { DOCUMENT } from '@angular/common';
  2. import { ErrorHandler, Inject, Injectable } from '@angular/core';
  3. @Injectable()
  4. export class CustomErrorHandler extends ErrorHandler {
  5. constructor(@Inject(DOCUMENT) private doc: any) {
  6. super();
  7. }
  8. handleError(error: any): void {
  9. try {
  10.   super.handleError(error);
  11. } catch (e) {
  12.   this.reportError(e);
  13. }
  14. this.reportError(error);
  15. }
  16. private reportError(error: string | Error): void {
  17. const win = this.doc.defaultView as any;
  18. if (win && win.onerror) {
  19.   if (typeof error === 'string') {
  20.   win.onerror(error);
  21.   } else {
  22.   win.onerror(error.message, undefined, undefined, undefined, error);
  23.   }
  24. }
  25. }
  26. }
复制代码
最后,在 AppModule 模块内注册 CustomErrorHandler :
  1. @NgModule({
  2. providers: [
  3.   { provide: ErrorHandler, useClass: CustomErrorHandler },
  4. ]
  5. })
  6. export class AppModule { }
复制代码
结论


事实上另有一项非常告急的工作,生产环境中都是打包压缩过后的,换言之所产生的非常消息也是无法与实际代码行数雷同的数字,这就需要 SourceMap 的支持,当然正常的生产环境是不会发布这份文件的,所以假如想要得到精确的行列数,还是需要借助一层中心层,在后端使用 source-map 模块来解析出真正的行列数值。
Angular 的依靠注入(DI)体系可以使我们快速替换一些 Angular 内置模块,从而实如今不修改业务层面时快速办理一些特殊需求。
总结

到此这篇关于Angular如那里理未可知非常错误的文章就先容到这了,更多相关Angular处理惩罚未可知非常错误内容请搜索草根技能分享从前的文章或继承欣赏下面的相关文章渴望大家以后多多支持草根技能分享!

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作