事件循环( Event Loop ),微任务( promise) 与 宏任务( setTimeout ):
2022/7/26 23:22:51
本文主要是介绍事件循环( Event Loop ),微任务( promise) 与 宏任务( setTimeout ):,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
事件循环( Event Loop ),微任务( promise) 与 宏任务( setTimeout ): 微任务( micro task ) :Javascript引擎发起的任务 宏任务( macro task ) :宿主(我们)发起的任务 异步任务的执行优先级并不相同,它们被分为两类:微任务( micro task ) 和 宏任务( macro task ) 根据异步事件的类型,这些事件实际上会被派发对应的宏任务和微任务中,在当前主线程执行完毕后,会先查看微任务中是否有事件存在,如果不存在,则再去找宏任务; 如果存在,则会依次执行队列中的参数,直到微任务列表为空,然后去宏任务中一次读取事件到主线程中执行,如此反复;当前主线程执行完毕后,会首先处理微任务队列中的事件,然后再去读取宏任务队列的事件。在同一次事件循环中,微任务永远在宏任务之前执行。 宏任务( macro-task ):整体 script、setTimeout、setInterval、UI交互事件、I/O 微任务( micro-task ):process.nextTick、Promise、MutaionObserver(突变观察者) (此处纯属个人理解:宏观任务保存在 “任务队列” 中,微观任务保存在 执行栈中,事件循环其实也就是不断执行宏观任务) (function test() { setTimeout(function() {console.log(4)}, 0); new Promise(function (resolve, reject) { console.log(1); // 微任务保存在执行栈中会立即执行 for( var i=0 ; i<10000 ; i++ ) { i == 9999 && resolve(); } console.log(2); }).then(function() { console.log(5); }); console.log(3); })() // 1. setTimeout:宏任务:存入宏任务队列 // 2. Promise:函数本身是同步执行的( **Promise** 只有一个参数,默认new的时候就会同步执行), // `.then` 是异步,因此依次打印1、2 `.then` 是微观任务Promise对象的回调函数,先于 setTimeout 执行 // 3. 打印3( 第一次主线程执行完毕 ) // 4. 执行微任务中的回调函数:5, 让后执行宏任务中的 `setTimeout` 4 // 最终结果1,2,3,5,4这篇关于事件循环( Event Loop ),微任务( promise) 与 宏任务( setTimeout ):的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?
- 2024-05-09企业src漏洞挖掘-有意思的命令执行
- 2024-05-08阿里云域名注册流程,分享给第一次购买域名的新手站长!