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

文章目录

  • 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.mzph.cn/bicheng/29897.shtml

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

相关文章

设计模式-结构型-06-桥接模式

1、传统方式解决手机操作问题 现在对不同手机类型的不同品牌实现操作编程(比如:开机、关机、上网,打电话等),如图: UML 类图 问题分析 扩展性问题(类爆炸):如果我们再…

shell脚本内使用ifconfig命令

脚本在定时任务中没有取出ip,说明ifconfig命令没有执行成功,就是没有找到ifconfig,与PATH环境变量有关,PATH环境变量在/etc/profile文件中设置,而定时任务却是以nologin方式调用脚本,不会加载/etc/profile,…

探讨 MyBatis 特殊 SQL 执行技巧与注意事项

在线工具站 推荐一个程序员在线工具站:程序员常用工具(http://cxytools.com),有时间戳、JSON格式化、文本对比、HASH生成、UUID生成等常用工具,效率加倍嘎嘎好用。 程序员资料站 推荐一个程序员编程资料站:…

Zygote进程的理解

Zygote进程是安卓系统的一个重要进程,由init进程创建而来;另外系统里的重要进程(system_server等)都是由zygote进程fork的,所有的app进程也是由zygote进程fork的。 一、C 里的fork函数 fork是Linux里面创建子进程的函…

电池荷电状态估计SOC?电池管理系统

一、背景 电池荷电状态(SOC, State of Charge)估计是电池管理系统(BMS, Battery Management System)的关键功能之一,对于确保电池的安全高效运行至关重要,特别是在电动车、储能系统以及便携式电子设备等领…

LCL滤波器并网逆变器双闭环控制系统仿真

并网逆变器通常采用L滤波器,虽然结构和控制简单,但是随着功率级别的增加,体积重量增大等问题也日益突出。为了解决这个问题,人们开始使用LCL滤波器,这种滤波器在功率较大的场合表现出色。 无源滤波器,又称…

Android使用data uri启动activity或service

设定AndroidManifest.xml 在AndroidManifest.xml文件中&#xff0c;我们可以设定activity或service的data。 <!-- activity定义方式 --> <activityandroid:name".page.main.MainActivity"><intent-filter><action android:name"an…

神经网络模型---ResNet

一、ResNet 1.导入包 import tensorflow as tf from tensorflow.keras import layers, models, datasets, optimizersoptimizers是用于更新模型参数以最小化损失函数的算法 2.加载数据集、归一化、转为独热编码的内容一致 3.增加颜色通道 train_images train_images[...,…

QML语法

文章目录 QML属性 QML QML是一种描述用户界面的声明式语言。它将用户界面分解成一些更小的元素&#xff0c;这 些元素能够结合成一个组件。QML语言描述了用户界面元素的形状和行为。用户界 面能够使用JavaScript来提供修饰&#xff0c;或者增加更加复杂的逻辑。从这个角度来看…

Linux 系统图像化编程GTK入门

环境前期准备 演示环境&#xff1a;Windows 11 Ubuntu 22.04.4 VS Code 前提条件&#xff1a;1、Windows 11 子系统Ubuntu 22.04.4 已经安装图形化界面&#xff0c;如果没有安装请参考文章&#xff1a; windows11子系统Ubuntu 22.04.4子安装图形化界面 2、Ubuntu 22.04.4…

C语言笔记第16篇:编译和链接

1、翻译环境和运行环境 在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境。 第1种是翻译环境&#xff0c;在这个环境中源代码被转换为可执行机器指令&#xff08;二进制指令&#xff09; 第2种是执行环境&#xff0c;它用于实际执行代码 2、翻译环境 那翻译环境是怎…

数据资产管理的未来趋势:洞察技术前沿,探讨数据资产管理在云计算、大数据、区块链等新技术下的发展趋势

一、引言 随着信息技术的飞速发展&#xff0c;数据已成为企业最重要的资产之一。数据资产管理作为企业核心竞争力的关键组成部分&#xff0c;其发展趋势和技术创新受到了广泛关注。特别是在云计算、大数据、区块链等新技术不断涌现的背景下&#xff0c;数据资产管理面临着前所…

通过文章id递归查询所有评论(xml)

<!-- 通过文章id递归查询所有评论 --> <select id"findByArticleId" resultMap"commentResultMap">SELECT * FROM mxg_comment WHERE parent_id -1AND article_id #{articleId}ORDER BY create_date DESC </select><!-- 将每…

【凤凰房产-注册安全分析报告-缺少轨迹的滑动条】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

2024 端午节巽寮湾游玩记录

2024 端午节巽寮湾游玩记录 文章目录 2024 端午节巽寮湾游玩记录一、前言二、巽寮湾游玩行程1、三天衣食住行2、主要图片&#xff1a; 三、其他1、小结2、巽寮湾游玩建议3、感慨 一、前言 时间总是过得很快&#xff0c;只要你活着时间就会不停往前走。 所以你以后的路其实都是…

外卖APP开发详解:从同城O2O系统源码开始

近期&#xff0c;从事软件开发的小伙伴们都在讨论外卖APP&#xff0c;热度非常之高&#xff0c;所以小编今天将与大家一同探讨同城O2O系统源码、外卖APP开发。 一、外卖APP开发的前期准备 了解目标用户的需求&#xff0c;分析竞争对手的优劣势&#xff0c;明确自身的市场定位。…

如何在Vue3中处理异步API调用并更新表单数据(附Demo)

目录 前言1. 问题所示2. 知识分析3. 实战 前言 从实战问题中剖析知识点 1. 问题所示 执行Vue3数据的时候&#xff0c;终端输出的data如下所示 Promise {<pending>} [[Prototype]] : Promise [[PromiseState]] : "fulfilled" [[PromiseResult]] : Array(…

Paddleocr数据增强调用逻辑

数据增强调用逻辑 以在ppocr/data/simple_dataset.py为例&#xff1a; get_ext_data通过self.ops[:self.ext_op_transform_idx]获取配置文件中数据增强 self.ops在def __init__(self, config, mode, logger, seedNone):中通过解析配置文件中transforms内容获取数据增强操作&a…

ADB->获取当前正在显示的Fragment和Activity的ADB命令

获取当前显示的Activity adb shell "dumpsys window | grep mCurrentFocus"指令拆解adb shell&#xff1a;启动一个远程shell来运行设备上的命令dumpsys window&#xff1a;获取当前窗口管理器的信息|&#xff1a;将前一个命令的输出作为后一个命令的输入grep mCurr…

【Unity拖拽物体】实现对点中的3D物体进行拖拽的功能

场景结构&#xff0c;两个普通模型 第一种 脚本所挂载的物体才可以被拖拽 【PC鼠标版本】 using UnityEngine;// 这个脚本实现了&#xff0c;本脚本所在的游戏物体能够被拖拽 public class DragObjectT : MonoBehaviour {private Vector3 screenPoint; // 存储物体在屏幕上的位…