事件循环执行顺序

Posted shiyunfront

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了事件循环执行顺序相关的知识,希望对你有一定的参考价值。

//主线程直接执行
console.log(‘1‘);
//丢到宏事件队列中
setTimeout(function() {
    console.log(‘2‘);
    process.nextTick(function() {
        console.log(‘3‘);
    })
    new Promise(function(resolve) {
        console.log(‘4‘);
        resolve();
    }).then(function() {
        console.log(‘5‘)
    })
})
//微事件1
process.nextTick(function() {
    console.log(‘6‘);
})
//主线程直接执行
new Promise(function(resolve) {
    console.log(‘7‘);
    resolve();
}).then(function() {
    //微事件2
    console.log(‘8‘)
})
//丢到宏事件队列中
setTimeout(function() {
    console.log(‘9‘);
    process.nextTick(function() {
        console.log(‘10‘);
    })
    new Promise(function(resolve) {
        console.log(‘11‘);
        resolve();
    }).then(function() {
        console.log(‘12‘)
    })
})
首先浏览器执行js进入第一个宏任务进入主线程, 直接打印console.log(‘1‘)

? 遇到 setTimeout  分发到宏任务Event Queue中

? 遇到 process.nextTick 丢到微任务Event Queue中

? 遇到 Promise, new Promise 直接执行 输出 console.log(‘7‘);

? 执行then 被分发到微任务Event Queue中

?第一轮宏任务执行结束,开始执行微任务 打印 6,8

?第一轮微任务执行完毕,执行第二轮宏事件,执行setTimeout

?先执行主线程宏任务,在执行微任务,打印‘2,4,3,5‘

?在执行第二个setTimeout,同理打印 ‘9,11,10,12’

?整段代码,共进行了三次事件循环,完整的输出为1,7,6,8,2,4,3,5,9,11,10,12。

以上是关于事件循环执行顺序的主要内容,如果未能解决你的问题,请参考以下文章

node事件循环中事件执行顺序

JavaScript同步异步及事件循环

shell if 语句

事件循环(event loop)

事件循环执行顺序

[jS 事件循环理解] 主线程 宏任务 微任务 - 执行顺序优先级理解