宏任务和微任务-----promise和setTimeout的优先级

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

宏任务和微任务的执行流程:
在这里插入图片描述
执行机制:宏任务执行完才会去执行微任务,并且是所有的微任务。

new Promise(function(resolve){//promise里面的函数也是同步
    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);//同步
//2
//3
//5
//4
//1

js单线程顺序是:先同步后异步,这点很重要
①首先会遇到script宏任务,script里面有setTimeout和promise,先执行setTimeout宏任务,再执行promise微任务;
②promise执行后, then会分发到微任务;这时会输出:2、3
③遇到 console 立即执行;这时会输出:5
④整体宏任务(这个宏任务指的是script标签)执行完成,接下来判断是否有微任务,微任务里面有then,执行;这时会输出:4
⑤ok,第一轮事件结束,进行第二轮,刚刚我们放在event queue 的setTimeout 函数进入到宏任务,立即执行;这时会输出:1
⑥结束。

发布了89 篇原创文章 · 获赞 5 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/me_never/article/details/102472565
今日推荐