while(macroQueue.waitForMessage()){//1.执行完调用栈上当前的宏任务(同步任务)//2.遍历微任务队列,把微任务队里的所有任务执行完毕for(let i=0;i<microQueue.length;i++){microQueue[i].processNextMessage()}//(微任务里边创建的微任务在当前事件循环执行完毕)//3.渲染//4.从宏任务队列取出下一个任务 开始下一次事件循环macroQueue.processNextMessage()}
产生宏任务的方式
script代码块
注册事件
setTimeout()
setInterval
产生微任务的方式
Promise
MutaionObserver
queueMicrolask 开启一个微任务。
何时使用微任务:
async await
- await之后如果不是promise 会加入promise中执行
