使用 .catch() 可以捕获链式调用中任何未处理的异步错误,它会自动跳过后续成功的 .then() 直接执行错误处理逻辑。只需在链的末尾或任意位置挂载 .catch(),即可统一处理来自前序步骤的异常。

.then() 成功回调如何传递值
.then() 接收上一步的返回值作为参数,并返回新 Promise 以继续链式调用。如果返回普通值,该值会传递给下一个 .then();如果返回另一个 Promise,则等待其状态确定后继续。

function step1() {
return Promise.resolve(10);
}
function step2(val) {
console.log('Step 2 received:', val); // 输出: 10
return val * 2;
}
function step3(val) {
console.log('Step 3 received:', val); // 输出: 20
return val + 5;
}
step1()
.then(step2)
.then(step3)
.then(result => console.log('Final:', result)); // 输出: Final: 25
.catch() 如何捕获特定错误
.catch() 专门用于捕获被拒绝(rejected)的 Promise。当链中任何地方抛出错误或返回被拒绝的 Promise 时,控制流会立即跳转到最近的 .catch()。它不会捕获同步代码中的异常,除非这些异常发生在 .then() 的回调函数内部。
立即学习“Java免费学习笔记(深入)”;

function failStep() {
return Promise.reject(new Error('Something went wrong'));
}
function successStep(val) {
return val * 2;
}
failStep()
.then(successStep)
.catch(err => {
console.error('Caught error:', err.message); // 输出: Caught error: Something went wrong
});基于程序中某个输入、条件或结果的具体问题
当链式调用中包含多个 .then() 和 .catch() 时,错误处理的行为取决于 .catch() 的位置。如果 .catch() 放在链的末尾,它将捕获之前所有步骤中发生的错误。如果 .catch() 放在中间,它只会捕获它之前的错误,并且它的返回值会成为后续 .then() 的输入。


















