遗漏 catch 会导致 Promise rejection 未捕获,引发逻辑中断、静默失败、调试困难及业务流程异常;需用 try/catch、Promise.allSettled 或显式错误处理保障健壮性。

因为遗漏 catch 会让错误变成未捕获的 Promise rejection,导致逻辑中断、静默失败、调试困难,甚至影响整个业务流程。
错误会直接中断后续代码执行
await 一个被 reject 的 Promise 后,若没有 try/catch,函数会立即退出,后面所有语句都不再运行:
- 比如
await api.getUser()失败,console.log('加载完成')和数据赋值操作全部跳过 - 用户看到页面空白或状态卡住,但控制台可能只报一条“unhandled promise rejection”,无明确上下文
错误不会自动向上冒泡到调用方
async 函数返回的是 Promise,它被 reject 后,必须由调用方显式处理:
- 写成
init()而不是init().catch(handleError),错误就悬空了 - 在 Vue/React 生命周期里用 async mounted 或 useEffect,框架本身不拦截 rejected Promise,也不会触发 error boundary
- 没加全局监听时,错误仅出现在 console,不报警、不记录、不反馈
多个异步操作容易“连坐失效”
顺序 await 时,前一个失败,后一个根本不会执行:
-
const user = await fetchUser()→ 失败 →const list = await fetchList()不发起 - 本可并行的请求被迫串行,且失败后无法降级(如用缓存替代用户数据)
- 想实现“部分成功”,必须用
Promise.allSettled或单独包 try/catch
空 catch 比没 catch 更危险
写了 catch 却不处理,等于主动掩盖问题:
-
catch (e) { }让错误完全消失,监控收不到、日志留不下、开发者无感知 - 至少要
console.error(e)或logError(e),否则线上问题无法定位 - 更推荐 re-throw 或返回默认值,保持调用链语义清晰

















