Promise then callback 面试题

49 阅读1分钟
Promise链式调用
Promise.resolve(1)
  .then(() => 2)
  .then(3)
  .then((value) => value * 3)
  .then(Promise.resolve(4))
  .then((value) => console.log("显示:", value)); // 6

推演过程的分析

Promise的两个阶段和三个状态:

(1)两个阶段:pending(进行中)和 settled(已敲定)
(2)三个状态:pending、fulfilled(已成功)和 rejected(已失败)

then可以接收两个参数:onFulfilled和onRejected函数

(1)如果then的参数不是函数,它会被忽略,前一个Promise的值会被传递下去
(2)这就解释了为什么.then(3)和.then(Promise.resolve(4))没有改变传递的值

在这个例子中,每个Promise都立即变为fulfilled状态。
  1. Promise.resolve(1) // 创建一个立即resolve的Promise,值为1

  2. .then(() => 2) // 这个then接收到值1,但没有使用。它返回2,所以新的Promise resolved with 2

  3. .then(3) // 这里,3不是一个函数。当.then接收到一个非函数参数时,它会被忽略, // 相当于.then(value => value)。所以,值2继续往下传递

  4. .then((value) => value * 3) // 这里接收到值2,返回2 * 3 = 6。新的Promise resolved with 6

  5. .then(Promise.resolve(4)) // 同样,Promise.resolve(4)不是一个函数,所以被忽略。 // 值6继续往下传递

  6. .then((value) => console.log("显示:", value)) // 最后这个then接收到值6,并将其打印出来