JS异常处理的一个想法(sofish)

yizhihongxing

下面是详细的文本攻略。

简介

JS异常处理的一个想法,是由前端开发者sofish提出的一种异常处理方案。这种方案能够减少代码中try-catch的使用,减少代码冗余,提高代码的可读性。

原理

这种方案的核心思想是使用事件代理,对于代码中可能出现的异常情况,可以在全局统一进行处理。事件代理通过监听window对象下的错误事件,可以捕获到应用中的所有异常。

实现步骤

  1. 在window对象上注册错误事件处理函数,捕获应用程序中所有的异常。
  2. 在事件处理函数中,通过异常信息判断出可能引发异常的代码位置,然后调用相应的代码处理函数。
  3. 开发过程中只需要在相应处理函数中实现具体的异常处理逻辑。
// 1. 我们需要监听全局错误事件
window.addEventListener('error', function(event) {
  // 2. 对捕获的异常进行信息提取
  let errMsg = event.message; // 错误信息
  let targetUrl = event.filename; // 出错文件URL
  let row = event.lineno; // 出错行号
  let col = event.colno; // 出错列号
  let errorObj = event.error; // 错误堆栈对象
  // 3. 根据提取的信息进行相应的处理
  if(targetUrl.indexOf('a.js') > -1) {
    handleErrorA();
  } else if(targetUrl.indexOf('b.js') > -1) {
    handleErrorB();
  } else {
    handleErrorDefault();
  }
});

示例说明

在以下两个示例中,我们分别模拟了两个常见的错误情况——网络请求失败和页面资源加载失败,并使用上述异常处理方案进行了处理。

  1. 网络请求失败
// 封装一个网络请求函数
function request(url) {
  return new Promise((resolve, reject) => {
    let xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
      if(xhr.readyState === 4 && xhr.status === 200) {
        resolve(xhr.responseText);
      }
    }
    xhr.onerror = function(err) {
      throw new Error('网络请求失败');
    }
    xhr.open('GET', url, true);
    xhr.send();
  });
}

// 异常处理函数
function handleRequestError() {
  // 显示错误提示信息
  alert('网络请求失败,请检查您的网络设置!');
}

// 监听全局错误事件,并进行处理
window.addEventListener('error', function(event) {
  let errMsg = event.message;
  let targetUrl = event.filename;
  let errorObj = event.error;
  if(errMsg === '网络请求失败') {
    handleRequestError();
  }
});

// 测试代码
request('http://baidu.com').then(res => console.log(res)).catch(err => console.error(err));
  1. 页面资源加载失败
<!-- index.html -->
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>页面资源加载失败测试</title>
  <link rel="stylesheet" href="./index.css">
  <script src="./index.js"></script>
  <script>
    // 异常处理函数
    function handleLoadError() {
      // 显示错误提示信息
      alert('页面资源加载失败,请检查网站配置!');
    }
    // 监听全局错误事件,并进行处理
    window.addEventListener('error', function(event) {
      let errMsg = event.message;
      let targetUrl = event.filename;
      let errorObj = event.error;
      if(targetUrl.indexOf('index.css') > -1 || targetUrl.indexOf('index.js') > -1) {
        handleLoadError();
      }
    });
  </script>
</head>
<body>
  <h1>页面资源加载失败测试</h1>
</body>
</html>

希望这份攻略能够对你理解sofish大神的异常处理方案有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS异常处理的一个想法(sofish) - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • 分享15个JavaScript的重要数组方法

    下面是详细讲解“分享15个JavaScript的重要数组方法”的完整攻略,具体分为以下几个部分: 1. 前言 数组是 JavaScript 中最常用的数据类型之一,常用于存储一系列的数据元素。在 JavaScript 中,数组提供了一系列强大的方法,帮助开发者更加高效地处理数据。下面将主要介绍 15 个 JavaScript 的重要数组方法。 2. Java…

    JavaScript 2023年5月18日
    00
  • js实现获取鼠标当前的位置

    获取鼠标当前位置是开发中常需要用到的功能之一。JavaScript可以轻松实现该操作。以下是获取鼠标当前位置的完整攻略。 获取鼠标当前位置的方式 常用的方式是利用鼠标移动事件,不断获取鼠标当前位置的横纵坐标。可以用鼠标移动事件mousemove来实现。 实现代码 下面是一个基本的 JavaScript 实现: document.addEventListene…

    JavaScript 2023年6月11日
    00
  • js将long日期格式转换为标准日期格式实现思路

    将long日期格式转换为标准日期格式,可以按照以下步骤进行操作: 获取long日期值 首先,我们需要获取包含long日期值的变量,可以是从数据库中查询到的时间戳,或者是前端传递过来的时间戳等。 示例1:获取当前时间戳 var timestamp = Date.now(); 示例2:获取后端传递过来的时间戳 var timestamp = response.d…

    JavaScript 2023年6月10日
    00
  • JS表单数据验证的正则表达式(常用)

    让我来为您详细讲解一下JS表单数据验证的正则表达式的常用方法: 一、正则表达式简介 正则表达式(Regular Expression)是一种文本模式,用来匹配、查找和替换文本中的字符,本身并不是JavaScript专有的东西。正则表达式通常被用来检查输入的字符串是否符合指定的格式,例如验证Email、密码和手机号等。 二、JS中的正则表达式 JavaScri…

    JavaScript 2023年6月10日
    00
  • JavaScript this指向绑定方式及不适用情况详解

    JavaScript this指向绑定方式及不适用情况详解 在JavaScript中,this指向非常重要。它在不同的上下文环境中有不同的绑定方式。本篇文章将详细介绍this指向的各种绑定方式,以及this指向不适用的情况。 this的绑定方式 全局上下文中的this 在全局上下文中,this指向全局对象(如浏览器中的 window),因为函数的定义是在全局…

    JavaScript 2023年6月10日
    00
  • 详解JS转换数值函数Number()、parseInt()、parseFloat()

    详解JS转换数值函数Number()、parseInt()、parseFloat() 前言 在JavaScript中,数值转换是很常见的操作。例如,用户输入的内容可能是字符串类型,而你需要将其转换成数值类型,或者你需要将数值类型转换为字符串类型,以便于存储或展示。为此,JavaScript提供了一些原生的函数用于进行数值类型之间的转换。其中,最常用的三个函数…

    JavaScript 2023年5月27日
    00
  • ElementUI 的 Tree 组件的基本使用实战教程

    ElementUI 的 Tree 组件的基本使用实战教程 一、什么是 Tree 组件 Tree(树形控件)组件是一个支持层级结构的数据展示组件,用于内部节点展开和收起。Tree 组件很常见于诸如管理系统、导航等场景中。 使用 ElementUI 的 Tree 组件时,需要安装和引入 ElementUI 组件库。可以在 ElementUI 的官网上查看组件具体…

    JavaScript 2023年6月10日
    00
  • JavaScript面向对象实现贪吃蛇游戏

    JavaScript面向对象实现贪吃蛇游戏的步骤如下: 定义Snake类 Snake类表示贪吃蛇,包含以下属性: body:表示蛇身,由一个包含多个坐标的数组组成 direction:表示蛇的方向,可以取值为”up”、”down”、”left”、”right”之一 Snake类包含以下方法: move():根据方向移动蛇的位置,并更新蛇的身体 changeD…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部