MST

星途 面试题库

面试题:JavaScript Promise 状态转换中的错误处理

在 Promise 链式调用中,如果其中一个 Promise 状态转换为 rejected,后续的 then 方法中的回调函数还会执行吗?如何在整个链式调用中统一处理错误?请编写代码示例进行说明。
46.9万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
  1. 后续 then 方法中的回调函数情况
    • 在 Promise 链式调用中,如果其中一个 Promise 状态转换为 rejected,后续 then 方法中作为第一个参数的成功回调函数不会执行。但是 then 方法中作为第二个参数的错误回调函数或者 .catch 方法中的回调函数会被执行。
  2. 统一处理错误方式及代码示例
    • 可以使用 .catch 方法在整个链式调用的末尾统一处理错误。以下是代码示例:
function resolveAfter2Seconds() {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve('resolved');
        }, 2000);
    });
}

function rejectAfter2Seconds() {
    return new Promise((_, reject) => {
        setTimeout(() => {
            reject('rejected');
        }, 2000);
    });
}

resolveAfter2Seconds()
   .then((result) => {
        console.log(result);
        return rejectAfter2Seconds();
    })
   .then((result) => {
        console.log(result); // 不会执行
    })
   .catch((error) => {
        console.error('统一处理错误:', error);
    });

在上述代码中,resolveAfter2Seconds 先被执行并成功,接着返回 rejectAfter2Seconds 这个会被拒绝的 Promise,此时第二个 then 中的成功回调不会执行,而 .catch 中的回调会捕获到错误并打印。