MST

星途 面试题库

面试题:JavaScript Promise 链式调用中的错误处理策略

假设有一个 Promise 链式调用 `Promise.resolve().then(func1).then(func2).catch(errHandler)`,`func1` 或 `func2` 抛出错误时,`errHandler` 如何捕获并处理错误?如果 `func1` 返回一个 rejected 的 Promise,`func2` 还会执行吗?请详细阐述原因并给出示例代码。
11.5万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
  1. errHandler 捕获并处理错误的方式
    • Promise 链式调用中,当 func1func2 抛出错误时,错误会沿着 Promise 链向下传递,直到被 catch 块捕获。errHandler 会捕获到 func1func2 抛出的错误,因为 catch 块会捕获 Promise 链中任何一个环节产生的错误。
    • 示例代码如下:
function func1() {
    throw new Error('func1 error');
}
function func2() {
    console.log('func2 should not be executed');
}
function errHandler(error) {
    console.log('Caught error:', error.message);
}
Promise.resolve()
  .then(func1)
  .then(func2)
  .catch(errHandler);
  1. 如果 func1 返回一个 rejected 的 Promisefunc2 还会执行吗
    • 如果 func1 返回一个 rejected 的 Promisefunc2 不会执行。因为 Promise 链式调用的规则是,只有前一个 then 中的回调函数返回一个 resolved 的 Promise 或者返回一个非 Promise 值(会被自动包装成 resolved 的 Promise)时,下一个 then 中的回调函数才会执行。当 func1 返回一个 rejected 的 Promise 时,错误会直接被 catch 块捕获,跳过 func2 的执行。
    • 示例代码如下:
function func1() {
    return Promise.reject(new Error('func1 rejected'));
}
function func2() {
    console.log('func2 should not be executed');
}
function errHandler(error) {
    console.log('Caught error:', error.message);
}
Promise.resolve()
  .then(func1)
  .then(func2)
  .catch(errHandler);