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

Javascript和NodeJS异常捕获对比

Javascript和NodeJS异常捕获

✅ 一、浏览器中的 JS 异常捕获

✅ 1. 同步异常:用 try...catch

try {console.log(a); // 报错:a is not defined
} catch (err) {console.error("捕获错误:", err.message);
}

📌 特点:只能捕获同步代码的异常。


❌ 2. 异步异常:try...catch 无效

try {setTimeout(() => {throw new Error("异步错误");}, 100);
} catch (err) {console.log("捕获不到"); // ❌ 不会执行
}
 

✅ 解决方案 1:把错误逻辑写到回调中处理

setTimeout(() => {try {throw new Error("异步错误");} catch (err) {console.error("在回调内部捕获:", err.message);}
}, 100);

✅ 解决方案 2:Promise 错误用 .catch

Promise.reject("Promise 错误").then(res => console.log(res)).catch(err => console.error("Promise 错误捕获:", err));

✅ 解决方案 3:async/awaittry...catch

async function test() {try {const res = await Promise.reject("Async 错误");console.log(res);} catch (err) {console.error("Async 捕获:", err);}
}
test();

✅ 二、Node.js 的异常捕获

Node.js 除了支持以上所有 JS 捕获方法,还提供了更多 全局和进程级的错误处理机制。


✅ 1. try...catch(同步和 async/await)

try {JSON.parse("invalid json");
} catch (e) {console.error("JSON解析失败:", e.message);
}

或 async 函数中:

async function run() {try {const data = await someAsyncFn();} catch (err) {console.error("捕获异步错误:", err.message);}
}

✅ 2. process.on('uncaughtException'):未捕获的同步异常

process.on('uncaughtException', (err) => {console.error('未捕获异常:', err);
});throw new Error("boom"); // 没有 try,触发上面

⚠️ 使用后,进程不会崩溃,但建议用于记录日志后手动退出进程


✅ 3. process.on('unhandledRejection'):未处理的 Promise 异常

process.on('unhandledRejection', (reason, promise) => {console.error('未处理的 Promise 错误:', reason);
});Promise.reject("出错啦!"); // 没有 .catch

✅ 4. 使用 domain 模块(已废弃,不推荐)

早期可用于捕获多个异步上下文中的错误,现在已不推荐。


🔥 三、综合实战示例(Node.js)

process.on("uncaughtException", (err) => {console.error("全局捕获异常:", err.message);
});process.on("unhandledRejection", (reason) => {console.error("全局 Promise 异常:", reason);
});function main() {// 同步异常throw new Error("同步炸了");
}async function testAsync() {// 异步异常await Promise.reject("异步炸了");
}main();
testAsync();

✅ 四、最佳实践总结

场景捕获方式
同步代码try...catch
异步 Promise.catch() / async + try/catch
未处理异常process.on('uncaughtException')
未处理 Promiseprocess.on('unhandledRejection')


🧠 提示:

  • 浏览器中不会有 process.on,那是 Node.js 专属。

  • 对于生产环境,建议你:

    • 捕获每个异步的 .catch

    • 使用日志系统记录 process.on(...) 的异常

    • 避免长期依赖 uncaughtException,会导致程序状态不可靠


需要我帮你写一个 Node.js 项目中的异常捕获封装工具(比如统一处理日志和响应),或者讲讲框架(如 Express/Koa)里如何处理错误?

http://www.xdnf.cn/news/14102.html

相关文章:

  • C++基础算法————二分查找
  • 深度学习——基于卷积神经网络实现食物图像分类【1】(datalodar处理方法)
  • VMware虚拟机集群上部署HDFS集群
  • 达梦的三权分立安全机制
  • 【机器学习与数据挖掘实战 | 医疗】案例16:基于K-Means聚类的医疗保险的欺诈发现
  • 使用 Azure LLM Functions 与 Elasticsearch 构建更智能的查询体验
  • 【论文解读】OmegaPRM:MCTS驱动的自动化过程监督,赋能LLM数学推理新高度
  • C++包管理器vcpkg的使用
  • RK全志平台LCD设备调试思路
  • JDBC基础(1)
  • python使用milvus教程
  • 使用 Git 将本地仓库上传到 GitHub 仓库的完整指南
  • 如何编写高效的Prompt:从入门到精通
  • 【Qt】QStateMachine状态机-实现播放按钮状态切换
  • Java 常用类 Math:从基础到高阶应用指南
  • 设计模式精讲 Day 1:单例模式(Singleton Pattern)
  • 将图片合成为视频(基于 OpenCV)
  • 【0.3 漫画数据结构与算法】
  • SNMP中BER编码解析
  • 微信小程序使用画布实现飘落泡泡功能
  • NLP学习路线图(四十八): NLTK
  • ​​实时人脸检测与人脸关键点识别系统实现
  • linux开机原理以及如何开关机-linux023
  • 同旺科技 USB TO SPI / I2C适配器(专业版)--EEPROM读写——B
  • 深入剖析 Celery:分布式异步任务处理的利器
  • 项目会议过多如何优化沟通效率
  • [论文阅读] 人工智能 | Gen-n-Val:利用代理技术革新计算机视觉数据生成
  • uni-app项目实战笔记6--同一组件使用Props传递不同的值
  • springMVC-13 文件下载及上传
  • 英伟达诉求1亿IOPS SSD:打破AI算力存储瓶颈