为了账号安全,请及时绑定邮箱和手机立即绑定

JS promise 执行顺序

JS promise 执行顺序

qq_遁去的一_1 2019-02-05 16:31:15
var p2 = new Promise(resolve => {   setTimeout(() => {     resolve()   }, 2000) })var p1 = new Promise(resolve => {   resolve(p2) }) p1.then(data => {  console.log('p1') }) p2.then(data => {  console.log('p2')  console.log('p1 status ', p1) // 这里在浏览器输出的是 pending 状态   Promise.resolve().then(() => {    console.log('here') // 然后这里会优先于 p1.then() 输出   }) })请问一下,p1 的状态到底什么时候才会改变呢?为什么执行到 console.log('p1 status ', p1) 时候,p1 的状态是 pending 呢?万分感谢~
查看完整描述

1 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

Promise里提供的resolve、reject参数是异步的,所以会晚于同步代码。

如果resolve函数里的参数是一个Promise实例,那么会等待这个实例的状态改变后才会改变状态。所以p1.then里的函数最后执行,因为p1的状态要等p2的状态确定后才能改变,所以执行到 console.log('p1 status ', p1) 时候,p1 还没有改变状态。

不好理解的话,我之前写了个Promise实现,你对比着上面的话看下。学习并实现一个Promise


查看完整回答
反对 回复 2019-02-05
  • 1 回答
  • 0 关注
  • 447 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信