美文网首页
Event Loop

Event Loop

作者: BingeryLamb | 来源:发表于2020-01-20 15:56 被阅读0次
    1. 执行全局script
      完毕调用栈Stack会清空
    2. microtask queue中取出位于队首的回调任务, 放入调用栈Stack中执行
      执行完后, 继续取出位于队首的任务,放入调用栈Stack中执行
      以此类推, 直到microtask queue中的所有任务都执行完毕
      microtask queue为空队列, 调用栈Stack也为空
    3. macrotask queue中取出位于队首的任务, 放入Stack中执行
      执行完毕后, 调用栈Stack为空
    4. 重复2-3
      重复2-3
      ...
    宏队列

    macrotask
    一些异步任务的回调会依次进入macro task queue, 等待后续被调用
    \color{red}{setTimeout}
    \color{red}{setInterval}
    I/O
    ...

    微队列

    一些异步任务的回调会依次进入micro task queue, 等待后续被调用
    process.nextTick (Node独有)
    \color{red}{Promise}
    \color{red}{Object.observe}
    ...

    console.log(1);
    
    setTimeout(() => {
      console.log(2);
      Promise.resolve().then(() => {
        console.log(3)
      });
    });
    
    new Promise((resolve, reject) => {
      console.log(4)
      resolve(5)
    }).then((data) => {
      console.log(data);
    })
    
    setTimeout(() => {
      console.log(6);
    })
    
    console.log(7);
    // 1 4 7 5 2 3 6
    

    相关文章

      网友评论

          本文标题:Event Loop

          本文链接:https://www.haomeiwen.com/subject/ajvjzctx.html