Promise.resolve()
.then(() => {
console.log(0)
return Promise.resolve(4)
})
.then(res => {
console.log(res)
})
Promise.resolve()
.then(() => {
console.log(1)
})
.then(() => {
console.log(2)
})
.then(() => {
console.log(3)
})
.then(() => {
console.log(5)
})
.then(() => {
console.log(6)
})
then 的返回(p)是一个 promise 。它是用起回调的返回值来 resolve。
当返回是一个 promise 的时候(
Promise.resolve(4)
是一个 promise。以后给它起个名字叫 p4 吧),p 不能立即 resolve ,所以它的 then 回调不会加入微任务队列。但是,它会在微任务队列加另一个任务,这个任务会调用 p4.then()。在这个微任务执行之后,打印了2
。p4.then()执行时,由于 p4 已经 resolve 了,于是它的回调被立即加入了微任务队列。它的回调将把 p 也置为 resolve 的状态,值是 4 。这个微任务之后,打印了
3
。p 被置为 resolve 之后,它的 then 的回调(打印
res == 4
)被放入了微任务队列。用 Promise(p4) 来 resolve Promise(p) ,会生成一个微任务(微任务1),这个微任务会调用 p4.then(),then 的回调(微任务2)将使用 p4 的 resolve 值来 resolve p。也就是至少经过两个微任务 p 才能被 resolve。