在 then 中转换 promise 错误,核心做法是返回一个被拒绝的 promise(如 promise.reject())或抛出异常。这样可以将当前链路的错误状态传递给后续的 catch 处理,实现错误的向上冒泡和统一拦截。

如何手动将成功结果转为拒绝状态
通过显式调用 Promise.reject() 并返回,可以中断当前的成功链路,使后续逻辑进入错误分支。这种方式适用于需要基于特定业务条件主动触发错误处理的场景。

const checkStatus = (status) => {
return new Promise((resolve, reject) => {
if (status === 200) {
resolve('Success');
} else {
// 手动转换为拒绝状态
reject(new Error(`Status ${status} is not OK`));
}
});
};
checkStatus(404)
.then(result => console.log(result))
.catch(err => console.error(err.message)); // 输出: Status 404 is not OK
如何在 then 中抛出同步异常以触发拒绝
在 then 的回调函数中直接使用 throw 语句抛出错误,会自动将该回调返回的 Promise 变为拒绝状态。这是处理同步逻辑错误或验证失败时的常用手段,无需手动包装 Promise。

const processData = (data) => {
return Promise.resolve(data);
};
processData(null)
.then(data => {
if (!data) {
throw new Error('Data is missing');
}
return data;
})
.catch(err => console.error(err.message)); // 输出: Data is missing
当 then 中同时存在成功和失败路径时如何处理
如果需要在同一个 then 中根据条件决定是继续成功还是转为失败,必须确保所有分支都返回 Promise 对象。无论是返回正常值、Promise.resolve() 还是 Promise.reject(),都能保证链路的连续性,最终由 catch 捕获非成功的结果。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











