请分析如下promise执行的结果并解释原因[代码]

36 阅读1分钟

"答案:

const promise1 = new Promise((resolve, reject) => {
  console.log('promise1');
  setTimeout(() => {
    resolve('resolved');
  }, 1000);
});

const promise2 = promise1.then((value) => {
  console.log(value);
  throw new Error('error thrown');
});

const promise3 = promise2.catch((error) => {
  console.log(error);
});

promise3.finally(() => {
  console.log('finally');
});

执行结果及解释:

promise1
resolved
error thrown
finally

解释:

  1. 首先,创建一个 Promise 对象 promise1,并在内部使用 setTimeout 模拟一个异步操作,在 1 秒后将 Promise 状态改为 resolved
  2. 然后,通过 promise1.then 注册一个回调函数,当 promise1 的状态变为 resolved 时,打印出 resolved,并抛出一个错误。
  3. 接着,通过 promise2.catch 注册一个回调函数,用于捕获上一个回调函数抛出的错误,并打印出错误信息。
  4. 最后,通过 promise3.finally 注册一个回调函数,不管前面的 Promise 是成功还是失败,都会执行这个回调函数。在这里,打印出 finally

综上所述,代码中的 Promise 顺序执行,promise1 先执行,然后是 promise2,接着是 promise3。最后,通过 finally 方法,无论前面的 Promise 是否成功或失败,都会执行 finally 回调函数。"