js异步promise和setTimeout的优先级
程序员文章站
2022-05-03 11:00:44
...
首先先看看概念:
①macro-task(宏任务):包括整体代码script,setTimeout,setInterval
②micro-task(微任务):Promise,process.nextTick
宏任务和微任务的执行流程:
执行机制:宏任务执行完才回去执行微任务,并且是所有的微任务。
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 函数进入到宏任务,立即执行;
⑥结束。
推荐阅读
-
AMD异步模块定义介绍和Require.js中使用jQuery及jQuery插件的方法
-
动态脚本元素实现js的异步加载和执行的教程
-
js异步编程的方法和原理详解
-
JS中setTimeout和setInterval的最大延时值详解
-
js异步和promise的学习
-
JS-原生/对于promise对象以及异步机制的理解
-
前端异步编程之Promise和async的用法
-
javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级
-
js异步执行(setTimeout)遇到的坑
-
AMD异步模块定义介绍和Require.js中使用jQuery及jQuery插件的方法