| 項目 | Event Loop Queue(Macro Task Queue) | Job Queue(Micro Task Queue) |
|---|---|---|
| 📌 又稱 | Task Queue / Callback Queue | Microtask Queue / Job Queue |
| 🎯 負責處理 | setTimeout、setInterval、I/O callbacks、DOM Events 等 | Promise.then()、queueMicrotask()、MutationObserver |
| ⏳ 執行時機 | 每輪事件循環的最後階段才會執行 | 每個 task 執行結束後立即清空 microtasks |
| 🥇 優先順序 | 較低,等微任務執行完才會輪到它 | 較高,會優先執行完所有 microtasks 才會進入下一個 macro task |
| ✅ 用途 | 處理整體非同步任務 | 處理細粒度更新、異步邏輯鏈接 |
[ 呼叫堆疊空了 ]
↓
[ 清空所有 Microtasks(Job Queue) ]
↓
[ 執行下一個 Macro Task(Event Loop Queue) ]
↓
[ 清空 Microtasks ]
↓
... 如此循環
console.log('1'); // 同步
setTimeout(() => {
console.log('4');
}, 0); // 放入 Task Queue
Promise.resolve().then(() => {
console.log('3');
}); // 放入 Job Queue
console.log('2'); // 同步
當我們談論「異步編程(Asynchronous Programming)」時,重點就是「不會阻塞主線程」,也就是說,我們可以執行一些耗時操作(如 API 請求、計時器、I/O 操作等)而不會卡住整個應用的運作。
Promise 是 JavaScript 中用來處理異步操作的一種物件,它代表某個未來才會完成(resolve)或失敗(reject)的操作。
async/await 是 Promise 的語法糖,用來讓異步程式碼看起來像同步的寫法,讓程式碼更容易閱讀與維護。