async函数异常处理是保障程序健壮性的基础防线,其返回的promise会自动将抛出异常或await的rejected promise转为rejected状态,可通过try/catch或.catch()捕获并分层响应错误。

async 函数的异常处理直接关系到程序是否能在出错时继续运行、是否能给出明确反馈、是否容易排查问题。它不是锦上添花的技巧,而是保障健壮性的基础防线。
async 函数天然返回 Promise,错误会以 rejected 状态向外传递
只要函数体中抛出异常(包括 await 后的 Promise 被 reject),整个 async 函数返回的 Promise 就自动进入 rejected 状态。这意味着:
- 不写 try/catch 时,错误不会静默消失,而是变成未捕获的 rejection
- 可以用 .catch() 在调用处统一兜底,避免整个应用崩溃
- 错误沿调用链向上冒泡,符合预期的控制流逻辑
try/catch 是最自然、最可控的捕获方式
await 让异步操作“看起来同步”,所以用同步风格的 try/catch 处理异步错误非常直观:
- 一个 try 块可覆盖多个 await 行,避免重复写 .catch()
- 能捕获 Promise reject,也能捕获 await 后续同步代码抛出的错误(比如 JSON.parse 失败、属性访问 undefined)
- 可在 catch 中做日志、降级、重试或转为业务提示,而不是让错误穿透到 UI 层
错误边界更清晰,便于分层响应
比如 API 请求失败时:
- 在 service 层用 try/catch 捕获,返回 null 或默认数据,UI 层无需关心网络细节
- 在页面逻辑层捕获,弹出用户友好的提示:“加载失败,请重试”
- 在根组件或路由守卫中加全局兜底,防止未处理 rejection 触发 devtools 报错
配合 Promise.all 和 race 时仍保持可预测性
- Promise.all([...]) 中任一 Promise reject,整个 all 就 reject → 可统一 try/catch
- Promise.race([...]) 返回最先 settled 的结果 → 若是 reject,同样能被外层 catch 捕获
- 避免因并发请求中的个别失败导致整体流程中断,或因忽略错误引发后续空值异常
不复杂但容易忽略
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











