任务队列和事件循环

时间:2021-07-21
本文章向大家介绍任务队列和事件循环,主要包括任务队列和事件循环使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

转载https://www.cnblogs.com/itgezhu/p/13259966.html
执行栈执行完同步任务,会向任务队列获取已处理完的异步任务,异步任务包括宏任务(常见setTimeout)和微任务(常见promise),微任务在每一个宏任务处理完时执行。(把全局看成一个宏任务,可理解为微任务先于宏任务,如下例子)

console.log('1');

setTimeout(function() {
    console.log('2');
    Promise.resolve().then(function() {
        console.log('3');
    })
    new Promise(function(resolve) {
        console.log('4');
        resolve();
    }).then(function() {
        console.log('5')
    })
})
Promise.resolve().then(function() {
    console.log('6');
})
new Promise(function(resolve) {
    console.log('7');
    resolve();
}).then(function() {
    console.log('8')
})

setTimeout(function() {
    console.log('9');
   Promise.resolve().then(function() {
        console.log('10');
    })
    new Promise(function(resolve) {
        console.log('11');
        resolve();
    }).then(function() {
        console.log('12')
    })
})

答案:1、7、6、8、2、4、3、5、9、11、10、12
例子中,打印出1后,new promise 会直接执行 7 ,而then会进入任务队列的微任务里,此时 76 同属一个宏任务里的微任务,6位置靠前,故先执行,,宏任务(定时器)会在全局的微任务结束后才执行,且宏任务包含的微任务紧随其后,故打印2 4 3 5,之后的9 11 10 12属于后一个宏任务,故最后输出

原文地址:https://www.cnblogs.com/wushengchu/p/15040411.html