当前位置: 首页 > news >正文

JavaScript,发生异常,try...catch...finally处理,继续向上层调用者传递异常信息

JavaScript中,‌异常(Exception)和错误(Error)

JavaScript 是一种解释型语言,通常在浏览器中通过JavaScript引擎执行。最著名的两个引擎是:SpiderMonkey(由 Mozilla Firefox 使用)和V8(由 Google Chrome 和 Node.js 使用)。

错误(Error):编译或解析阶段的致命问题(如语法错误),程序无法运行。 ‌‌处理方式‌:需开发者修复代码后才能运行,无法通过程序逻辑处理。

异常(Exception):运行时发生的可处理问题(如调用未定义方法、文件不存在),程序可继续运行。‌处理方式‌:通过try-catch结构捕获并恢复执行,避免程序终止。

Error对象及错误处理机制:https://blog.csdn.net/c_s_d_n_2009/article/details/149408647

JavaScript的finally块

JavaScript,finally块通常用于执行无论是否捕获到异常都必须执行的代码。

1、捕获了异常后,不再向上层调用者传递任何异常信息,使用finally处理。

async function fetchData(path) {const data = await fetch(path).then((response) => {if (!response.ok) {throw new Error("Network response was not ok");}return response.json();});return data;
}// 向上层调用者继续传递异常
async function getData() {let data = {};try {// 模拟一个可能失败的操作data = await fetchData("https://www.sequelize.cn/");} catch (error) {throw new Error("错误: " + error.message);} finally {// 使用了finally,return data;}// return data;
}async function main() {try {const data = await getData();console.log("Data:", data);} catch (error) {console.error("Error fetching data:", error);}
}main();

输出: Data: {}

2、捕获了异常后,还想继续向上层调用者传递异常信息,不使用finally处理。

async function fetchData(path) {const data = await fetch(path).then((response) => {if (!response.ok) {throw new Error("Network response was not ok");}return response.json();});return data;
}// 向上层调用者继续传递异常
async function getData() {let data = {};try {// 模拟一个可能失败的操作data = await fetchData("https://www.sequelize.cn/");} catch (error) {throw new Error("错误: " + error.message);}// finally {//   // 使用了finally,//   return data;// }return data;
}async function main() {try {const data = await getData();console.log("Data:", data);} catch (error) {console.error("Error fetching data:", error);}
}main();

输出:  Error fetching data: Error: 错误: Unexpected token '<', "<!doctype "... is not valid JSON

http://www.dtcms.com/a/291925.html

相关文章:

  • 20250722在Ubuntu 24.04.2下配置编译RD-RK3588开发板的Android13的编译环境
  • 八大作业票(一) 动火安全作业证
  • 分布式高可用ELK平台搭建及使用保姆级教程指南
  • axios统一封装规范管理
  • 同步本地文件到服务器上的Docker容器
  • 学习做精准、自动化、高效的 GEO优化系统
  • 如何判断进程是否存活?Linux 系统中的核心方法解析
  • 【前端】ikun-pptx编辑器前瞻问题一: pptx的xml样式, 使用html能100%还原么
  • UE5 UI ScrollBox 滚动框
  • 报错error:0308010C:digital envelope routines::unsupported解决方案
  • 《Webpack热更新瓶颈突破:全链路优化指南》
  • Android KTX:让Kotlin开发更简洁高效的利器
  • 闲庭信步使用图像验证平台加速FPGA的开发:第二十九课——车牌识别的FPGA实现(1)车牌定位的预处理
  • 边缘计算网关赋能智慧农业:物联网边缘计算的创新应用与实践
  • vue apk返回键不好使
  • git push新版问题解决
  • ArrayList与顺序表
  • 【C++】继承和多态扩展学习
  • 面向对象的三大特征
  • Go 语言中,创建结构体实例对象有几种常用方式
  • 大数学习笔记整理
  • Leetcode—692. 前K个高频单词【中等】(桶排序)
  • 从感知到决策:虚拟仿真系统与视觉算法融合下的多路RTSP视频接入技术探究
  • freertos关键函数理解 uxListRemove
  • 基于 Spring Batch 和 XXL-Job 的批处理任务实现
  • linux c语言进阶 - 进程,通信方式
  • PHICOMM(斐讯)N1盒子 - Armbian25.05(Debian 12)刷入U盘/EMMC
  • Unity之C# 脚本与Unity Visual Scripting 交互
  • Java 网络编程详解:从基础到实战,彻底掌握 TCP/UDP、Socket、HTTP 网络通信
  • 【数据可视化-70】奶茶店销量数据可视化:打造炫酷黑金风格的可视化大屏