promise 的 catch 方法可统一捕获链中未处理的异步错误,需置于链末尾作为兜底;错误不跨链传播,catch 返回 fulfilled 状态的新 promise;避免用 then 第二参数吞错,推荐统一用 catch 或 async/await 的 try/catch。

Promise 的 catch 方法可以统一捕获链式调用中任意环节抛出的异步错误,前提是错误没有在中途被 catch 拦截并吞掉。
catch 会捕获链中所有未处理的 reject
Promise 链中只要有一个 Promise 被 reject,且后续没有被 catch 或带第二个参数的 then 处理,错误就会一直向后传递,直到遇到第一个 catch。这个特性让集中错误处理成为可能。
- 推荐写法:把
catch放在链末尾,作为兜底处理 - 错误不会“跨链”传播,不同链需各自加
catch -
catch本身返回一个新的 Promise,状态为 fulfilled(除非它自己 throw)
避免错误被意外吞掉
常见陷阱是用了 then(onFulfilled, onRejected) 的第二参数,但没 re-throw 或返回 Promise.reject(),导致错误终止传播。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- ❌ 错误示范:
then(() => {}, err => console.error(err))—— 错误被吃掉,后续catch捕不到 - ✅ 正确做法:想处理又继续传播,就显式返回
Promise.reject(err)或直接throw err - ✅ 更推荐统一用
catch,语义清晰、不易遗漏
结合 async/await 时 catch 同样有效
用 async/await 写的代码底层仍是 Promise 链,try...catch 实际等价于链末尾的 catch。
- await 后的 Promise 被 reject,会触发
catch块 - 多个 await 可共用一个 try/catch,实现统一错误处理
- 注意:只对当前函数作用域内的 await 生效,不跨函数传播
实际应用建议
统一错误处理的关键不是“能不能”,而是“怎么设计才不漏”。
- 业务层 API 调用链末尾统一加
.catch(handleError),把错误转成用户友好的提示 - 工具函数内部尽量不吞错误,让调用方决定如何处理
- 开发阶段可加全局 unhandledrejection 监听,快速发现漏处理的 reject
- 网络请求类错误建议分类(如超时、4xx、5xx),再做差异化响应
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










