promise then链问题

const createPr = ()=>{
  const pr = new Promise((resolve,reject)=>{
    setTimeout(() => {
      resolve('11')
    }, 2000);
  })
  pr.then((res)=>{//<--------
    console.log('c1',res);// c1 11
    return '22'
  })
  return pr
}
createPr().then((res)=>{
  console.log('c2',res);// c2 11
})
const createPr = ()=>{
  const pr = new Promise((resolve,reject)=>{
    setTimeout(() => {
      resolve('11')
    }, 2000);
  }).then((res)=>{//<--------
    console.log('c1',res);// c1 11
    return '22'
  })
  return pr
}
createPr().then((res)=>{
  console.log('c2',res);// c2 22
})

为什么这俩种不同写法会导致then拿到的值不同呢?

阅读 1.5k
2 个回答

所有then方法都会重新实例化一个Promise对象
第一种写法,pr是new Promise()的实例化对象,执行pr.then方法,会将回调按顺序保存在队列中,resolve的时候依次执行
第二种写法,new Promise().then,执行完后返回的是then方法返回的Promise实例,而不是new Promise()的实例

我猜的(仅提供一个思路):就是一个Promise的最终返回值就是他那段链式调用的最终结果,

首先看第一个,如下图:
prresolve('11')赋值为11,所以return的是11
resolve('11')是这段Promise的终点
如果你写pr = pr.then(...),那么第一段代码和第二段代码输出的值就一样了
image.png

然后看第二个段代码:
prreturn '22'22,所以pr值是22
pr.then(...)里面的return '22'是这段Promise的终点
image.png

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