在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
catch 应放在 promise 链最末端,捕获之前所有环节的错误(包括 reject、throw、返回 rejected promise 等),推荐统一收口处理;中间加 catch 会局部消化错误,导致逻辑混乱。

在 Promise 链中,catch 方法应放在链的**最末端**,用于捕获前面任意一步(包括 then 回调中)抛出的错误或被 reject 的 Promise。
catch 捕获范围:从它之前所有环节
catch 会捕获它之前整个链条中的异常,包括:
- 某个
Promise.reject()被触发 -
then的成功回调里throw了错误 -
then的成功回调返回了一个被 reject 的 Promise -
then的失败回调本身出错(除非再加catch)
正确写法:链末尾加一个 catch
这是最常见也最推荐的方式:
(示例)fetch('/api/data')
.then(res => {
if (!res.ok) throw new Error('HTTP error');
return res.json();
})
.then(data => console.log(data))
.catch(err => {
console.error('出错了:', err.message);
// 统一处理网络失败、解析失败、业务校验失败等
});
注意 catch 不会“吞掉”错误,而是返回新 Promise
catch 回调执行后,默认返回一个 resolved 状态的 Promise(值为 catch 回调的返回值)。这意味着:
- 如果想继续链式操作,可以在
catch里返回数据或新 Promise - 如果
catch里又throw或返回 reject 的 Promise,后续仍可接catch - 不写
catch,未捕获的 rejection 会触发全局unhandledrejection事件
避免陷阱:不要在中间随意加 catch
除非你明确要“局部消化”某步错误并转为正常流程,否则别在链中间写 catch。例如:
promiseA()
.catch(() => console.log('这里吞掉了错误'))
.then(() => promiseB()) // promiseB 仍可能失败,但上面的 catch 不管它
.catch(() => console.log('只管 promiseB 的错'));
这种写法会让错误处理分散、逻辑难追踪。统一收口更清晰。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










