参考笔者之前转载的一篇- 10 分钟理解 JS 引擎的执行机制
例子:
//process是微任务
// 值得注意的一点是, 每次宏任务执行完, 就执行该宏任务对应的微任务
console.log('1') // 1 同步代码:立即执行 [1]
setTimeout(function () {
console.log('2') // 3 同步代码执行执行 输出2
process.nextTick(function () {
console.log('3') // 4 进入微任务队列 [3]
})
new Promise(function (resolve) {
console.log('4') // 3 同步代码执行执行 输出4
resolve()
}).then(function () {
console.log('5') // 4 进入微任务队列 [3, 5]
})
})
process.nextTick(function () {
console.log('6') // 2 进入微任务队列 [6]
})
new Promise(function (resolve) {
console.log('7') // 1 宏任务:立即执行 [1, 7]
resolve()
}).then(function () {
console.log('8') // 2 进入微任务队列 [6, 8]
})
setTimeout(function () {
console.log('9') // 5 宏任务:立即执行 [9]
process.nextTick(function () {
console.log('10') // 6 进入微任务队列 [10]
})
new Promise(function (resolve) {
console.log('11') // 5 宏任务:立即执行 [9, 11]
resolve()
}).then(function () {
console.log('12') // 6 进入微任务队列 [10, 12]
})
})
// 执行顺序:1 7 6 8 2 4 3 5 9 11 10 12