try...catch错误处理
JavaScript try…catch 错误处理笔记(对应选集263 Error Handling With try…catch)
一、try…catch 与 async/await 的关联(核心应用场景)
1.1 关键特性
- async/await 语法中,无法像普通 Promise 那样直接使用
.catch()方法捕获错误,需借助 try…catch 语句实现错误处理 - try…catch 并非专为 async/await 设计,是 JavaScript 语言原生特性(可能从语言初始阶段就存在),可同时用于同步代码和异步代码的错误捕获
- 核心价值:在不中断脚本执行的前提下,捕获代码中的异常并进行自定义处理
1.2 应用示例(async/await 场景)
1 | // 异步函数:通过 API 获取国家数据 |
二、try…catch 基本工作原理(同步代码场景)
2.1 语法结构
1 | try { |
- 执行逻辑:JavaScript 先尝试执行 try 块中的代码;若执行过程中出现错误,立即终止 try 块,跳转到 catch 块执行错误处理;若 try 块无错误,catch 块会被跳过
2.2 同步代码示例(错误捕获演示)
示例1:捕获“重新分配常量”错误
1 | // 未使用 try...catch 的情况(脚本会中断) |
示例2:无错误场景(catch 块跳过)
1 | let a = 5; |
三、try…catch 的适用范围与限制
3.1 不适用场景:语法错误排查
- 注意:try…catch 不能用于捕获代码编写阶段的语法错误(如括号不闭合、变量名拼写错误等)
- 示例(无法捕获的语法错误):
1 | try { |
- 正确用法:语法错误需通过代码检查工具(如 ESLint)或开发者工具的“控制台”在编码阶段排查,try…catch 主要用于处理运行时错误(如网络请求失败、数据格式异常等)
3.2 适用场景:运行时错误处理
- 典型场景:
- 异步操作错误(网络请求失败、定时器中的错误)
- 数据处理错误(JSON 解析失败、数组越界)
- 用户输入错误(非法值导致的计算错误)
示例:处理 JSON 解析错误
1 | const parseJsonData = (jsonStr) => { |
四、fetch 场景的特殊处理(关键注意点)
4.1 fetch 的默认行为陷阱
- fetch API 仅在“无网络连接”或“请求无法发送”时会拒绝 Promise 并触发错误;对于 404(资源不存在)、403(权限不足)等 HTTP 错误状态码,fetch 仍会认为请求“成功”,不会自动抛出错误
- 解决方案:在 try 块中手动判断
response.ok属性(response.ok为 true 表示状态码在 200-299 之间),若为 false 则主动抛出错误
4.2 完整示例(处理 fetch 所有错误场景)
1 | const fetchUser = async (userId) => { |
五、错误处理最佳实践
5.1 核心原则
- 不忽略错误:永远不要空写 catch 块(
catch (err) {}),至少记录错误信息 - 精准错误信息:通过
err.message获取错误详情,必要时记录错误堆栈(err.stack)便于定位问题 - 用户友好提示:将技术错误转化为用户可理解的语言(如“网络连接异常,请检查网络”而非“TypeError: Failed to fetch”)
- 错误分层处理:底层函数抛出错误,上层函数根据业务场景处理错误(如重试、降级等)
5.2 实践示例(分层处理)
1 | // 底层工具函数:负责发送请求(仅抛出错误,不处理) |
本文是原创文章,采用CC BY-NC-SA 4.0协议,完整转载请注明来自木鱼的鱼窝


