欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

js异步promise和setTimeout的优先级

程序员文章站 2022-05-03 11:00:44
...

首先先看看概念:
①macro-task(宏任务):包括整体代码script,setTimeout,setInterval
②micro-task(微任务):Promise,process.nextTick

宏任务和微任务的执行流程:
js异步promise和setTimeout的优先级
执行机制:宏任务执行完才回去执行微任务,并且是所有的微任务。

new Promise(function(resolve){
    console.log(2)
    for( var i=0 ; i<10000 ; i++ ){
        i==9999 && resolve()
    }
    console.log(3)
}).then(function(){
    console.log(4)
});
setTimeout(function(){console.log(1)},0);
console.log(5);

①首先会遇到script宏任务,script里面有setTimeout和promise,先执行setTimeout宏任务,再执行promise微任务;
②promise执行后, then会分发到微任务;
③遇到 console 立即执行;
④整体宏任务(这个宏任务指的是script标签)执行完成,接下来判断是否有微任务,微任务里面有then,执行;
⑤ok,第一轮事件结束,进行第二轮,刚刚我们放在event queue 的setTimeout 函数进入到宏任务,立即执行;
⑥结束。