如何优雅的处理异常?

1、 Js 语法异常,代码异常

2、 ajax 请求异常

3、 静态资源加载异常

4、 Promise 异常

  promise中使用catch可以非常方便的捕获到异常error, 在全根据增加一个对unhandledrejection的
  的监听。防止遗漏的Promise
  window.addEventListener("unhandledrejection", functoin(e){
      console.log(e);
  })

5、 Iframe 异常

 Iframe异常的捕获需要借助 window.onerror
window.onerror = function(message, source, lineno,. colno, error) {
  console.log('捕获到异常:', { message, sourece, lineno, colno, error })
}

6、 跨域 Script error

跨域资源共享机制, 我们为 script 标签添加 crossOrigin 属性。
<script  src="http://jartto.wang/main.js"></script>
或者动态去添加js脚本: 
const script = document.createElement('script');
script.crossOrigin = 'anonymous';
script.src = url;
document.body.appendChild(script);

7、 崩溃和卡顿

崩溃和卡顿时不可忽视的,也许会导致你的用户流失。
1、 利用 window 对象的 load 和 beforeunload 事件实现了网页崩溃的监控。
建议阅读:[Logging Information on Browser Crashes]{http://jasonjl.me/blog/2015/06/21/taking-action-on-browser-crashes/}
2、 基于一下原因, 我们可以使用Service Worker 来实现网页奔溃的监控。
Service Worker 有自己独立的工作线程, 与网页区分开,网页奔溃了, Service Worker 一般情况下不会奔溃;
Service Worker 生命周期一般要比网页还要长, 可以用来监控网页的状态;
网页可以通过navigator.serviceWorker.controller.postMessageAPI向掌管自己的SW发送消息。

8、 try - catch

 try-catch只能捕获到同步时的运行异常,对语法和异常错误却无能为力,捕获不到。
 一般语法异常应该只能在开发阶段就可以看到,应该不会顺利上到线上环境。
 同时一般 setTimeout 中的异常也无不会捕获。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容