透彻的给解释一下 感觉不太懂 输出什么了?

const p1 = new Promise((resolve, reject) => {
resolve(1)
})
const p2 = new Promise((resolve, reject) => {
resolve(2)
})
p1.then(res => {
console.log(res)
p2
})
.then(res => {
console.log(res)
})

阅读 1.2k
1 个回答
// 声明一个p1的Promise对象
const p1 = new Promise((resolve, reject) => {
  resolve(1) // 内部直接调用resolve,返回1
})
// 声明一个p2的Promise对象
const p2 = new Promise((resolve, reject) => {
  resolve(2) // 内部直接调用resolve,返回2
})

// 调用 p1 并且执行成功(resolve)后进入 .then 方法
p1.then(res => {
  console.log(res) // 输出返回值 => 1
  p2 // 执行p2
})
.then(res => { // 前一个 .then 执行完毕后执行
  console.log(res) // 输出返回值 => undefined
})

// 控制台输出
1
undefined

主要是 .then 的连用问题。连用的 .then 会等待上一个 .then 执行完毕。

如果上一个.then 的回调函数有 return 回来结果,那么就会将返回结果作为参数,传入第二个回调函数。

上面的例子中 p1.then 后并没有 return 一个结果,所以:

  • 第一个 .then 中的 console.log(res) 输出的是 1
  • 第二个 .then 中的 console.log(res) 输出的是 undefined

如果想要连续调用,可以这样写:

p1.then(res => {
  console.log(res)
  return p2
})
.then(res => {
  console.log(res)
})

// 或者这样写
p1.then(res => {
  console.log(res)
  p2.then(res => {
    console.log(res)
  })
})


// 控制台输出
1
2

具体关于 Promise 相关的内容,可以查看阮一峰老师的 Promise 对象 - ECMAScript 6入门

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题