Skip to content

思考

Promise 构造函数是同步执行还是异步执行,那么 then 方法呢?

js
const promise = new Promise((resolve, reject) => {
  console.log(1)
  resolve()
  console.log(2)
})

promise.then(() => {
  console.log(3)
})

console.log(4)

执行结果是:1243 promise 构造函数是同步执行的,then 方法是异步执行的

链式调用

我们可以把多个的 promise 链接到一起以表示一系列异步步骤。这种方法可以实现的关键在于以下两个 Promise 固有行为特性。

  • 每次 Promise 调用 then(),它都会创建并返回一个新的 Promise,我们可以将它链接起来。
  • 不管从 then()调用的完成回调(第一个参数)返回的值是什么,它都会被自动设置为被链接 Promise(第一点中的)的完成

then 中的返回值

js
const p = Promise.resolve(21)
p.then((v) => {
  console.log('v', v) // 21
  return v * 2
}).then((v) => {
  console.log('v', v) // 42
})

这里我们使用了 return 返回了 v*2 ,这会立即完成链接的 promise,但如果步骤 2 需要步骤 1 异步完成一些事情呢?

js
const p = Promise.resolve(21)
p.then((v) => {
  console.log('v', v) // 21
  return new Promise((resolve, reject) => {
    resolve(v * 2)
  })
}).then((v) => {
  console.log('v', v) // 42
})

这里我们 return 了一个新的 promise

Reference