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
添加回答
举报
0/150
提交
取消