事件循环:Promise与宏任务,微任务

本文探讨了JavaScript的事件循环机制,包括宏任务和微任务的区别,重点介绍了Promise和async函数在事件循环中的角色。举例说明了setTimeout、Promise.then以及async/await在事件队列中的执行顺序,帮助理解其工作原理。
摘要由CSDN通过智能技术生成

宏任务与微任务

宏任务:script,setTimeout,setInterval,MessageChannel,I/O(文件,网络)相关API,DOM事件监听,setImmediate(Node.js)。

微任务:process.nextTick(Node.js)MutationObserver(浏览器),Promise.prototype.then()/catch()/finally()。

requestAnimationFrame是宏任务还是微任务?

有4种不同的情况:
宏任务里面新建宏任务:加入宏任务的队列中
运行宏任务时新建微任务:加入微任务的队列中
运行微任务时新建宏任务:加入宏任务的队列中
运行微任务时新建了微任务:新创建的微任务也会马上加入微任务队列,再下次宏任务之前一定会执行。

Promise与async函数

Promise语句属性微任务,也就是可以在一次事件循环中执行多个。直到微任务所在栈为空。但是Promise的构造函数是同步任务,

new Promise((resolve) => { … }).then(() => { … }) 在.then函数之前的部分都是同步任务。

面试中还常常出现async函数,本质上还是Promise的变种。在async函数中await语句之前,都是同步的(包括await语句),await语句之后的语句都属于await语句返回的Promise中的.then函数的回调中要执行的。有多个await语句同理等于多层Promise嵌套

setTimeout函数使用setTimeout(fn, 0)时,并不是马上执行,因为是宏任务,所以,需要等同步任务完成之后,才能运行。最小间隔时间为4毫秒

一个简单的例子

使用 setTimeout和Promise.then和async/await函数当例子看看。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值