首页前端开发JavaScriptAngular处理未可知异常错误的方法详解

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

时间2024-01-31 14:59:02发布访客分类JavaScript浏览1013
导读:收集整理的这篇文章主要介绍了Angular处理未可知异常错误的方法详解,觉得挺不错的,现在分享给大家,也给大家做个参考。 写在前面代码写得再好,始终都无法完整的处理所有可能产生异常,特别...
收集整理的这篇文章主要介绍了Angular处理未可知异常错误的方法详解,觉得挺不错的,现在分享给大家,也给大家做个参考。

写在前面

代码写得再好,始终都无法完整的处理所有可能产生异常,特别是生产环境中的应用,很大一部分是数据来自用户、远程,很难保证所有数据都按程序规定的产生。事实上,除非测试人员发现或者客户报告,否则都无法得知。因此,将应用产生的未可知异常进而上报是非常重要的环节。

Angular 默认情况下也提供了全局的异常管理,当发生异常时,会把它扔到 Console 控制台上。如果你在使用 NG-ZORRO 时,可能经常就会遇到 ICON 未加载的异常消息,这也是异常消息的一种:

core.js:5980 ERROR Error: [@ant-design/icons-angular]:the icon setting-o does not exist or is not registered. at IconNotFoundError (ant-design-icons-Angular.js:94) at MapSubscriber.PRoject (ant-design-icons-angular.js:222) at MapSubscriber._next (map.js:29) at MapSubscriber.next (Subscriber.js:49) at RefcountSubscriber._next (Subscriber.js:72) at RefCountSubscriber.next (Subscriber.js:49) at Subject.next (Subject.js:39) at ConnectableSubscriber._next (Subscriber.js:72) at ConnectableSubscriber.next (Subscriber.js:49) at CatchSubscriber.notifyNext (innerSubscribe.js:42)

而 Angular 是通过 ErrorHandler 统一管理异常消息,而且只需要覆盖其中的 handleError 方法并重新处理异常消息即可。

ErrorHandler

首先创建一个 custom-error-handler.ts 文件:

import {
 ErrorHandler, Injectable }
     From '@angular/core';
@Injectable()export class CustomErrorHandler extends ErrorHandler {
 handleError(error: any): void {
     suPEr.handleError(error);
 }
}
    

CustomErrorHandler 可以完整的获取当前用户数据、当前异常消息对象等,并允许通过 HttpClient 上报给后端。

以下是 NG-ALAIN 的文档站,由于是使用 GOOGLE Analytics 来分析,只需要将异常消息转给 onerror 即可:

import {
 DOCUMENT }
     from '@angular/common';
import {
 ErrorHandler, Inject, Injectable }
     from '@angular/core';
@Injectable()export class CustomErrorHandler extends ErrorHandler {
 constructor(@Inject(DOCUMENT) private doc: any) {
     super();
 }
 handleError(error: any): void {
 try {
      super.handleError(error);
 }
 catch (e) {
      this.reportError(e);
 }
     this.reportError(error);
 }
 private reportError(error: string | Error): void {
     const win = this.doc.defaultView as any;
     if (win &
    &
 win.onerror) {
  if (typeof error === 'string') {
      win.onerror(error);
  }
 else {
      win.onerror(error.message, undefined, undefined, undefined, error);
  }
 }
 }
}
    

最后,在 AppModule 模块内注册 CustomErrorHandler :

@NgModule({
 providers: [  {
 provide: ErrorHandler, useClass: CustomErrorHandler }
, ]}
)export class AppModule {
 }
    

结论

事实上还有一项非常重要的工作,生产环境中都是打包压缩过后的,换言之所产生的异常消息也是无法与实际代码行数相同的数字,这就需要 SourceMap 的支持,当然正常的生产环境是不会发布这份文件的,所以如果想要得到正确的行列数,还是需要借助一层中间层,在后端利用 source-map 模块来解析出真正的行列数值。

Angular 的依赖注入(DI)系统可以使我们快速替换一些 Angular 内置模块,从而实现在不修改业务层面时快速解决一些特殊需求。

总结

到此这篇关于Angular如何处理未可知异常错误的文章就介绍到这了,更多相关Angular处理未可知异常错误内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

您可能感兴趣的文章:
  • 使用Raygun来自动追踪AngularJS中的异常

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

上一篇: nodejs中的异步编程知识点详解下一篇:react-native 实现购物车滑动删除...猜你在找的JavaScript相关文章 html font标签如何设置字体大小?html font标签属性用法介绍2022-05-16vue3+TypeScript+vue-router的使用方法2022-04-16vue3获取当前路由地址2022-04-16如何利用React实现图片识别App2022-04-16JavaScript展开运算符和剩余运算符的区别详解2022-04-16微信小程序中使用vant框架的具体步骤2022-04-16Vue elementUI表单嵌套表格并对每行进行校验详解2022-04-16如何利用Typescript封装本地存储2022-04-16微信小程序中wxs文件的一些妙用分享2022-04-16JavaScript的Set数据结构详解2022-04-16 其他相关热搜词更多phpjavapython程序员loadpost-format-gallery

若转载请注明出处: Angular处理未可知异常错误的方法详解
本文地址: https://pptw.com/jishu/594111.html
c语言中除号用什么表示 c语言自定义函数

游客 回复需填写必要信息