【八股系列】怎么处理项目中的异常捕获行为?(js)

news2024/10/7 16:18:02

🎉 博客主页:【剑九 六千里-CSDN博客】
🎨 上一篇文章:【[shouldComponentUpdate是为了解决什么问题?(React)]添加链接描述】
🎠 系列专栏:【面试题-八股系列】
💖 感谢大家点赞👍收藏⭐评论✍

在这里插入图片描述
在这里插入图片描述

文章目录

  • 1. 基本的try-catch-finally结构
  • 2. 全局异常处理
  • 3. 自定义错误类
  • 4. 使用Promise的catch
  • 5. 异步函数中的try-catch
  • 6. 记录日志
  • 7. 用户友好的错误提示

JavaScript项目中,合理地处理异常捕获对于提高程序的健壮性和用户体验至关重要。以下是一些关键实践和方法:

1. 基本的try-catch-finally结构

  • try: 将可能会抛出错误的代码包裹在try块内。
  • catch: 使用catch块来捕获在try块中发生的错误,并在此处处理错误。
  • finally: 可选的finally块无论是否发生错误都会执行,通常用于清理资源,如关闭文件或数据库连接。
try {
  // 尝试执行的代码
} catch (error) {
  // 处理错误
  console.error('捕获到错误:', error);
} finally {
  // 无论是否捕获到错误都会执行的代码
}

2. 全局异常处理

  • Node.js应用中,可以使用process.on('uncaughtException')process.on('unhandledRejection')监听未被捕获的异常和Promise拒绝。

  • 在浏览器环境中,可以通过window.onerror监听全局脚本错误。

// Node.js示例
process.on('uncaughtException', (error) => {
  console.error('未捕获的异常:', error);
  // 进程退出或其他逻辑处理
  process.exit(1);
});

// 浏览器示例
window.onerror = function(message, source, lineno, colno, error) {
  console.error('全局错误处理:', message, source, lineno, colno, error);
};

3. 自定义错误类

创建自定义错误类继承自Error,以便于区分和处理不同类型的错误。

class CustomError extends Error {
  constructor(message) {
    super(message);
    this.name = 'CustomError';
  }
}

try {
  throw new CustomError('这是一个自定义错误');
} catch (error) {
  if (error instanceof CustomError) {
    console.log('处理自定义错误');
  } else {
    console.log('处理其他错误');
  }
}

4. 使用Promise的catch

确保每个Promise链都有.catch来处理拒绝的情况。

fetchData()
  .then(processData)
  .catch((error) => {
    console.error('Promise错误:', error);
  });

5. 异步函数中的try-catch

在使用async/await时,直接在async函数内部使用try-catch来捕获异常。

async function fetchDataAndProcess() {
  try {
    const data = await fetchData();
    // 处理数据
  } catch (error) {
    console.error('异步操作错误:', error);
  }
}

6. 记录日志

异常发生时,记录详细的错误日志,便于后续分析和问题定位。

7. 用户友好的错误提示

对于前端应用,捕获到错误后,应向用户提供清晰、友好的错误信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1849434.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于51单片机计步器—无线蓝牙APP上传

基于51单片机计步器设计 (程序+原理图+设计报告) 功能介绍 具体功能: 本设计由STC89C52单片机最小系统ADXL345加速度传感器lcd1602液晶电路蓝牙模块电路呼吸灯电路电源电路组成。 1.通过ADXL345检测步数&#xff0…

平价蓝牙耳机排行榜,2024四款必入蓝牙耳机盘点!

蓝牙耳机已逐渐成为我们日常生活中不可或缺的一部分,从晨跑锻炼到深夜加班,从喧嚣的城市到静谧的乡村,蓝牙耳机都以其便捷性和出色的音质,陪伴我们度过了一个又一个美好时光,市场上琳琅满目的蓝牙耳机品牌与型号&#…

全栈工程师工作总结(二)

1. linux允许ROOT登录ftp # 进入vsftpd目录 cd /etc/vsftpd# 查看该目录包含的文件 ls# 进入文件vsftpd.ftpusers,在root前加#注释root vi vsftpd.ftpusers# 进入文件vsftpd.user_list,在root前加#注释root vi vsftpd.user_list2. 关于只能IP访问&…

[图解]企业应用架构模式2024新译本讲解16-行数据入口2

1 00:00:00,750 --> 00:00:02,470 好,我们来看代码 2 00:00:03,430 --> 00:00:06,070 我们一步一步执行 3 00:00:42,500 --> 00:00:45,000 先初始化数据 4 00:00:52,300 --> 00:00:53,650 创建连接 5 00:00:55,900 --> 00:00:56,970 这里面 6 0…

计算机组成原理笔记-第4章 存储器

第4章 存储器 笔记PDF版本已上传至Github个人仓库:CourseNotes,欢迎fork和star,拥抱开源,一起完善。 该笔记是最初是没打算发网上的,所以很多地方都为了自我阅读方便,我理解了的地方就少有解释&#xff1b…

【ARM】MDK自动备份源文件

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决MDK在编写文档的时候需要找回上一版代码的问题。 2、 问题场景 目前大部分情况下对于源代码的管理都是使用的Git等第三方的代码管理平台。这样的第三方代码管理平台都是针对与代码的版本更新进行管理。对于本地…

SwiftUI 6.0(iOS 18)ScrollView 全新的滚动位置(ScrollPosition)揭秘

概览 在只有方寸之间大小的手持设备上要想体面的向用户展示海量信息,滚动视图(ScrollView)无疑是绝佳的“东牀之选”。 在 SwiftUI 历史的长河中,总觉得苹果对于 ScrollView 视图功能的升级是在“挤牙膏”。这不,在本…

【图解IO与Netty系列】Netty源码解析——ChannelPipeline中的责任链模式

Netty源码解析——ChannelPipeline中的责任链模式 ChannelPipeline的作用ChannelPipeline的设计ChannelPipeline源码解析 ChannelPipeline的作用 ChannelPipeline在Netty中的作用,主要是在有事件就绪时,用于处理就绪事件的。我们知道真正处理就绪事件的…

力扣SQL50 每月交易 I 求和 SUM(条件表达式) DATE_FORMAT(日期,指定日期格式)

Problem: 1193. 每月交易 I 👨‍🏫 参考题解 Code select DATE_FORMAT(trans_date, %Y-%m) AS month,country,count(*) as trans_count,count(if(state approved, 1, NULL)) as approved_count,sum(amount) as trans_total_amount,sum(if(state appr…

5.3 Python len()函数:获取字符串长度或字节数

Python len()函数详解:获取字符串长度或字节数 Python 中,要想知道一个字符串有多少个字符(获得字符串长度),或者一个字符串占用多少个字节,可以使用 len 函数。 len 函数的基本语法格式为: …

性能工具之 MySQL OLTP Sysbench BenchMark 测试示例

文章目录 一、前言二、测试环境1、服务器配置2、测试拓扑 三、测试工具安装四、测试步骤1、导入数据2、压测数据3、清理数据 五、结果解析六、最后 一、前言 做为一名性能工程师掌握对 MySQL 的性能测试是非常必要的,本文基于 Sysbench 对MySQL OLTP(联…

YOLOv8中的C2f模块

文章目录 一、结构概述二、模块功能 一、结构概述 C2f块:首先由一个卷积块(Conv)组成,该卷积块接收输入特征图并生成中间特征图特征图拆分:生成的中间特征图被拆分成两部分,一部分直接传递到最终的Concat块,另一部分传递到多个Botleneck块进…

uniapp(全端兼容) - 最新详细实现刻度尺组件效果,uni-app实现尺子打分及手指拖动刻度尺打分评分功能,可左右滑动刻度尺改变数值、带刻度尺滑块功能、

效果图 在uniapp微信小程序/手机h5网页网站/安卓app/苹果app/支付宝小程序/nvue等(全平台完美兼容)开发中,实现uniApp各端都兼容的 “刻度尺(横格尺 | 尺子)” 手势左右两侧拖动、手指滑动刻度尺功能,水平刻度尺,支持自定义尺子颜色、大小、刻度、滑动时的步进值、最大…

【Java】已解决java.net.ConnectException异常

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决java.net.ConnectException异常 在Java的网络编程中,java.net.ConnectException是一个常见的异常,它通常表明在尝试建立网络连接时出现了问题。本文将…

“循环购“:快消品行业的创新商业模式引领者

大家好,我是吴军,来自一家在软件开发与商业模式创新领域享有盛誉的公司。我们专注于为企业提供全方位的商城系统搭建及商业模式定制服务。迄今为止,我们已经成功地为众多企业打造了超过200种独特的商业模式,助力他们实现了显著的商…

如何跳出认知偏差,个人认知能力升级

一、教程描述 什么是认知力?认知力(cognitive ability),实际上就是指一个人的认知能力,是指人的大脑加工、储存和提取信息的能力,或者主观对非主观的事物的反映能力,如果变成大白话&#xff0c…

Dev Eco Studio设置中文界面

Settings-Plugins-installed-搜索Chinese

WindTerm软件的本地模式和远程模式

WindTerm作为一个多功能的远程终端控制软件,支持本地模式和远程模式两种键盘输入处理方式,这两种模式的主要区别在于键盘输入的处理逻辑和目标: 本地模式(Local Mode) 在本地模式下,WindTerm不对键盘输入…

Android设计模式系列--模板方法模式

认识到模板方法的这种思想,父类可以让未知的子类去做它本身可能完成的不好或者根本完成不了的事情,对框架学习大有帮助。 本文以View中的draw方法为例,展开分析。 模板方法,TemplateMethod,光是学习这个模式&#xf…

Flutter第十二弹 Flutter多平台运行

目标: 1.在多平台调试启动Flutter程序运行 一、安卓模拟器 1.1 检查当前Flutter适配的版本 flutter doctor提供了Flutter诊断。 $ flutter doctor --verbose /Users/zhouronghua/IDES/flutter/bin/flutter doctor --verbose [✓] Flutter (Channel master, 2.1…