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中执行