宏任务:
setTimeout
I/O
setInterval
setImmediate
主线程
MessageChannel
微任务:
Promise 系列 .then .catch .finally
process.nexttick
MutationObserver
console.log(1)
setTimeout(() => {
console.log(8)
}, 2000)
setTimeout(() => {
console.log(3)
Promise.resolve().then(() => {
console.log(4)
})
setTimeout(() => {
console.log(6)
}, 3000)
}, 1000)
new Promise((resolve, reject) => {
console.log(5)
resolve()
}).then(() => {
console.log(7)
})
console.log(2)
结果:1 - 5 - 2 - 7 - 3 - 4 - 8 - 6
解释:微任务优先级大于宏任务,newPromise不属于微任务会立刻执行,主线程执行完打印152,微任务执行打印7,第一个宏任务执行打印3,出现一个微任务打印4,没有其他微任务了,出现一个宏任务,打印8,没有其他微任务,执行最后一个宏任务,打印6