1. while(macroQueue.waitForMessage()){
    2. //1.执行完调用栈上当前的宏任务(同步任务)
    3. //2.遍历微任务队列,把微任务队里的所有任务执行完毕
    4. for(let i=0;i<microQueue.length;i++){
    5. microQueue[i].processNextMessage()
    6. }
    7. //(微任务里边创建的微任务在当前事件循环执行完毕)
    8. //3.渲染
    9. //4.从宏任务队列取出下一个任务 开始下一次事件循环
    10. macroQueue.processNextMessage()
    11. }

    产生宏任务的方式
    script代码块
    注册事件
    setTimeout()
    setInterval
    产生微任务的方式
    Promise
    MutaionObserver
    queueMicrolask 开启一个微任务。

    • 何时使用微任务:

    • async await

      • await之后如果不是promise 会加入promise中执行