new Promise((resolve, reject) => {
resolve()
}).then(() => {
console.log(1)
new Promise((resolve, reject) => {
resolve()
}).then(() => {
console.log(2)
})
setTimeout(() => { console.log(3) }, 0)
})
console.log(4)
setTimeout(() => { console.log(5) }, 0)
// 4
// 1
// 2
// 5
// 3
为什么2比5先打印?第一次 macrotask queue
执行完后将 microtask queue
中的 Promise.then 中的函数推出执行,执行结束后不是应该调用 macrotask queue
中的 setTimeout
么?为什么 .then 中的 Promise 先执行了。
检查
microtask queue
,有promise
回调要处理,出队并执行p1
回调,执行回调的过程中往microtask queue
添加promise
,这是第一轮检查。继续检查microtask queue
,发现p2
回调,出队执行,第二轮结束。检查
macrotask queue