Event Loop — JavaScript

Coba bayangin warung mie ayam yang cuma ada SATU tukang masak. Kalo tiap pesanan harus selesai dulu sebelum tukang kerjain pesanan berikutnya — kamu antri 30…

JavaScript mengerjakan kode satu per satu, satu hal dalam satu waktu. Kode yang harus menunggu, misalnya timer, gak dikerjakan saat itu juga: dia dititip ke antrean dan dijalankan nanti. Event loop adalah aturan yang menentukan kapan tiap antrean dapat giliran.

🧪 Tebakan cepat: setTimeout(..., 0) artinya tunggu 0 milidetik. Apa callback-nya langsung jalan sebelum baris berikutnya? Tebak dulu, jawabannya ada di bagian "Tebak urutan cetaknya".

Tebak urutan cetaknya

console.log("A");

setTimeout(() => {
  console.log("B");
}, 0);

Promise.resolve().then(() => {
  console.log("C");
});

console.log("D");

Yang tercetak: A, D, C, B. Langkahnya:

Jadi jawaban tebakannya: gak. 0 milidetik cuma berarti "secepatnya", dan secepatnya itu tetap sesudah kode utama dan semua microtask selesai.

Aturan yang mengatur urutan ini namanya event loop. Patokannya: kode biasa dulu dari atas ke bawah, lalu semua callback Promise, baru callback setTimeout.

Tiga tempat kode menunggu giliran

Event loop mengulang tiga langkah yang sama terus-menerus:

  1. Jalankan call stack sampai kosong.
  2. Kerjakan semua microtask sampai antreannya habis.
  3. Ambil satu task, lalu balik ke langkah 1.

Jadi microtask selalu selesai duluan sebelum task berikutnya jalan, walaupun task-nya ditulis lebih dulu.

⚠️ Jebakan yang sering ketemu

🔬 Coba sendiri

Alat di bawah menjalankan beberapa program langkah demi langkah, termasuk async/await, dan menandai mana yang jalan langsung, mana yang microtask, dan mana yang macrotask.

TL;DR: JavaScript menjalankan satu hal dalam satu waktu, dan event loop menentukan urutannya: kode biasa di call stack dulu, lalu semua microtask (callback .then dari Promise, kode sesudah await), baru satu macrotask (callback setTimeout, klik). Ulang terus. Karena itu setTimeout(fn, 0) tetap jalan sesudah Promise, dan loop yang berat bikin halaman membeku.

Yang akan kamu pelajari