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

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.dtcms.com/a/249704.html

相关文章:

  • vim编辑常用命令
  • 零基础RT-thread第二节:按键控制
  • MQTT 和 CoAP物联网通信协议之争:MQTT 与CoAP 深度对比分析
  • 如何编写高效的Prompt:从入门到精通
  • 前端基础知识CSS系列 - 03(em/px/rem/vh/vw)
  • CS144 lab0: warmup
  • Flutter网络请求完全指南:http与Dio库深度解析
  • js调试技巧
  • 微机原理与接口技术,期末冲刺复习资料(汇总版)
  • React配置别名路径完整指南
  • Spring MVC扩展消息转换器-->格式化时间信息
  • Python的“Rstudio“——Pycharm
  • 17.vue.js响应式和dom更新
  • LangChain执行引擎揭秘:RunnableConfig配置全解析
  • 同旺科技 USB TO SPI / I2C适配器(专业版)--EEPROM读写——A
  • c 语言如何将 uint8_t *tg_pFrames的数据给 uint8_t **ppJpg
  • 数据库管理员密码重置指南:MySQL, Oracle, PostgreSQL
  • 华为OD机考-货币单位换算-字符串(JAVA 2025B卷)
  • Cursor ReAct Agent技术架构
  • OpenLayers 创建坐标系统
  • 自注意力 vs 卷积 vs 循环层:长距离依赖建模的终极对决
  • 2.3.3 07年T2
  • 13.20 LangChain多链协同架构实战:LanguageMentor实现67%对话连贯性提升
  • Node.JS安装及配置教程(Windows)【安装】
  • uni-app项目实战笔记13--全屏页面的absolute定位布局和fit-content自适应内容宽度
  • 节日快乐啊
  • Tauri(2.5.1)+Leptos(0.8.2)开发自用桌面小程序
  • Python爬虫-批量爬取快手视频并将视频下载保存到本地
  • day034-rsync异地容灾
  • Java内存模型与垃圾回收:提升程序性能与稳定性!