JavaScript ทำงานบน thread เดียว ดังนั้นจึงทำได้เพียงสิ่งเดียวในแต่ละครั้ง Event loop คือสิ่งที่ช่วยให้จัดการงาน async โดยไม่ยุ่งเหยิง: มันรันcall stack และเมื่อ stack ว่าง มันจะดึง callbacks จากqueues
มี queues สองอัน โดยมีลำดับความสำคัญต่างกัน:
JavaScript ทำงานบน thread เดียว ดังนั้นจึงทำได้เพียงสิ่งเดียวในแต่ละครั้ง Event loop คือสิ่งที่ช่วยให้จัดการงาน async โดยไม่ยุ่งเหยิง: มันรันcall stack และเมื่อ stack ว่าง มันจะดึง callbacks จากqueues
มี queues สองอัน โดยมีลำดับความสำคัญต่างกัน:
.then), queueMicrotask ว่าง ทั้งหมด หลังจากแต่ละ task ก่อนการ rendersetTimeout, I/O, UI events ประมวลผลหนึ่งรายการต่อการวนซ้ำ loopconsole.log("1"); // sync
setTimeout(() => console.log("2"), 0); // macrotask
Promise.resolve().then(() => console.log("3")); // microtask
console.log("4"); // sync
// Output: 1, 4, 3, 2
1, 432นี่คือเหตุผลที่ Promise.then เสมอทำงาน ก่อน setTimeout(…, 0) แม้ว่าทั้งสองเป็น "async" — microtasks มีความสำคัญ
// ❌ blocks the single thread — UI freezes for 5 seconds
while (Date.now() - start < 5000) {}
งาน synchronous ที่นาน ยุ่งเหยิงทุกอย่าง (rendering, clicks) เลื่อนงาน CPU หนักไปยัง Web Worker (thread แยกจริง)
การเข้าใจ loop อธิบายลำดับ async ว่าทำไม promises resolve ก่อน timers และทำไมจึงไม่ควรบล็อก main thread — แบบจำลองจิตใจหลักสำหรับ async JavaScript ทั้งหมด