当前页面的脚本发生错误如何解决win7 javascript 异常处理的一些经验

11/27 23:14:35 来源网站:辅助卡盟网

当前页面的脚本发生错误如何解决win7 javascript 异常处理的一些经验

简介:为了提升应用稳定性,我们对前端项目开展了脚本异常治理的工作,对生产上报的js error进行了整体排查,试图通过降低脚本异常的发生频次来提升相关告警的准确率,结合最近在这方面阅读的相关资料,尝试阶段性的做个总结,下面我们来介绍下js异常处理的一些经验。

作者 | 肖荣强(路迁)

来源 | 阿里开发者公众号

写在前面

为了提升应用稳定性,我们对前端项目开展了脚本异常治理的工作,对生产上报的js error进行了整体排查,试图通过降低脚本异常的发生频次来提升相关告警的准确率,结合最近在这方面阅读的相关资料,尝试阶段性的做个总结,下面我们来介绍下js异常处理的一些经验。

先说概念

什么是异常

先来看一下官方的定义:

Error objects are thrown when runtime errors occur. The Error object can also be used as a base object for user-defined exceptions.

描述的很简单,我们总结一下就是代码在执行过程中遇到了问题,程序已经无法正常运行了,Error对象会被抛出,这一点它不同于大部分编程语言里使用的异常对象Exception,甚至更适合称之为错误,应该说事实也确实如此,Error对象在未被抛出时候和js里其他的普通对象没有任何差别是不会引发异常的,同时Error 对象也可用于用户自定义错误的基础对象。

看下面两个例子:

try {
  const 123variable = 2;
} catch(e) {
  console.log('捕获到了:', e)
}

↓↓↓执行结果↓↓↓

结论:只有在执行过程中的异常可以被捕获,语法解析阶段的异常或者不在当前同步任务中的异常都无法被捕获。

<script>
  function throwSomeError() {
    throw new Error('抛个异常玩玩');
    console.log('我估计是凉了,不会执行我了!');
  }
  throwSomeError();
  console.log('那么我呢?')
</script>
<script>
  console.log('大家猜猜我会执行吗?');
</script>

↓↓↓执行结果↓↓↓

以上红色信息里包含了异常信息(message)和栈跟踪(stack trace)信息,对于定位代码中的问题起到重要作用,可以看到栈跟踪是从底部文件位置21:15到顶部25:7位置的;前两个console在遇到异常时候未被执行,第二个script标签内的代码被正常执行。

结论:当任务执行过程中出现未处理的异常,会一直沿着调用栈一层层向外抛出(有点像事件冒泡),最终会导致当前任务被终止执行。当前任务终止后JS 线程会继续从任务队列中提取下一个任务继续执行。

异常的类型

当前脚本发生错误 sript_当前脚本发生错误_当前页面的脚本发生错误如何解决win7

1、以上这些异常很多都来会由Javascript引擎抛出,但异常类型都是实际的构造函数,旨在生成一个新的异常实例,所以你可以:

// 获取分页数据
const getPagedData = (pageIndex, pageSize) => {
  if(pageIndex < 0 || pageSize < 0 || pageSize > 1000) {
    throw new RangeError(`pageIndex 必须大于0, pageSize必须在0和1000之间`);
  }
  
  return [];
}
// 转换时间格式
const dateFormat = (dateObj) => {
  if(dateObj instanceof Date) {
    return 'formated date string';
  }
  
  throw new TypeError('传入的日期类型错误');
}

    暂无相关资讯
当前页面的脚本发生错误如何解决win7 javascript 异常处理的一些经验