macrotask 巨集任務 + microtask 微任務區別

weixin_34208283發表於2018-05-16
  • macrotasks: setTimeout setInterval setImmediate I/O UI渲染
  • microtasks: Promise process.nextTick Object.observe MutationObserver
process.nextTick(() => {
  console.log('nextTick')
})
Promise.resolve()
  .then(() => {
    console.log('then')
  })
setImmediate(() => {
  console.log('setImmediate')
})
console.log('end')
//end
//nextTick
//then
//setImmediate
//解釋:process.nextTick 和 promise.then 都屬於 microtask,
而 setImmediate 屬於 macrotask,在事件迴圈的 check 階段執行。
事件迴圈的每個階段(macrotask)之間都會執行 microtask,
事件迴圈的開始會先執行一次 microtask。

參考:
https://juejin.im/entry/58332d560ce46300610e4bad
https://segmentfault.com/a/1190000008866165
http://www.jb51.net/article/57882.htm

相關文章