Microtask & Macrotask

Event Loop: Microtask & Macrotask
Macrotask:
  • 就是前面所說的Event Queue也稱為Task Queue,Web API具有非同步行為都放在Macrotask裡
Microtask:
  • 通常為Promise產生,Promise裡用的then , catch 兩個方法會以非同步執行,當Promise被解析完成,狀態不是pending時,catch, then 就會被送去 Microtask Queue 或稱為 Job Queue
順序:
MicroTask Queue會在每個Macrotask結束後被運行,運行MicroTask時,會把MicroTask Queue裡所有MicroTask清空,才執行其他Macrotask
  • 所有的 Queue 都會等待執行環境堆疊被清空,alert 肯定會先執行
  • setTimeout 對應的函式會被當作一個 Macrotask ,等待時間到之後被送入 Macrotask Queue
  • Promise 對應的 .then 或 .catch 的函式會被當作一個 Microtask 送入 Microtask Queue
  • 在執行環境堆疊清空之後,通常網頁會先做一次 Render,Render 的動作同時也算是一個 Macrotask
notion image
  • 對於瀏覽器來說,在網頁頁面開啟時,載入對應的 JS 檔並且執行這件事情,也是一個 Macrotask,所以執行完alert,會執行promise的Microtask,再執行timeout 的 Macrotask
notion image