我眼中的event loop

2018-05-23  本文已影响0人  CodorMonkey
科普一波
  1. js执行是单线程的,执行顺序是 macro-task -> micro-task -> macro-task -> ... 交替执行
  2. macro-task,以下简称macro,包含:js整体代码、setTimeout、setInterval、setImmediate、IO、UI rendering
  3. micro-task,以下简称micro,包含:process.nextTick、Promises(这里指浏览器实现的Promise)、Object.observe(已废弃)、MutationObserver
上代码(执行环境为Node 8.9.4)
setImmediate(function () {
  console.log(14);
});

setTimeout(function () {
  console.log(13)
});

process.nextTick(function () {
  console.log(4);
});

new Promise(function (resolve) {
  console.log(1);

  for (let i = 0; i < 10000; i++) {
    i === 9999 && resolve()
  }

  console.log(2);

  process.nextTick(function () {
    console.log(5);
  });
}).then(function () {
  console.log(6);

  process.nextTick(function () {
    console.log(10);
  });

  new Promise(function (resolve) {
    console.log(7);
    resolve();
    console.log(8);
    process.nextTick(function () {
      console.log(11);
    });
  }).then(function () {
    console.log(9);
    process.nextTick(function () {
      console.log(12);
    });
  })
});

console.log(3);

执行结果为 1 2 3 ... 14

开始分析
上一篇 下一篇

猜你喜欢

热点阅读