mahirasyncfungsicallbackMahir3 mnt baca

Callback Function

Fungsi sebagai argumen: fondasi pemrograman async dan pola yang dipakai di seluruh JavaScript.

Fungsi yang dikirim sebagai data

Di JavaScript, fungsi adalah warga kelas satu: bisa disimpan di variabel, dikembalikan dari fungsi, dan dikirim sebagai argumen. Fungsi yang dikirim sebagai argumen untuk dipanggil nanti disebut callback.

javascript
function proses(nama, callback) {
  console.log("Memproses " + nama + "...");
  callback(); // panggil nanti
}

proses("data", () => {
  console.log("Selesai diproses!");
});

Analoginya seperti memberi nomor telepon ke kurir: "kalau paket sampai, hubungi nomor ini". Kamu tidak menunggu di depan pintu, kurir yang menghubungimu nanti.

Callback sudah kamu pakai

Tanpa sadar, kamu sudah memakai callback di banyak tempat:

javascript
// array method
[1, 2, 3].forEach(n => console.log(n));

// event
tombol.addEventListener("click", () => console.log("diklik"));

// timer
setTimeout(() => console.log("nanti"), 1000);

Semuanya mengikuti pola sama: "ini yang harus dilakukan, lakukan saat waktunya tiba".

Callback untuk operasi async

Kegunaan utama callback adalah operasi yang butuh waktu: baca file, request API, query database.

javascript
function ambilData(callback) {
  setTimeout(() => {
    callback({ nama: "Rizky" }); // data "datang" setelah 1 detik
  }, 1000);
}

ambilData((data) => {
  console.log("Data diterima: " + data.nama);
});
console.log("Tidak menunggu...");

Program tidak berhenti menunggu. Ia lanjut jalan, dan callback dipanggil saat data siap.

Callback hell: sisi gelapnya

Operasi async bertingkat membuat callback bersarang dalam, dikenal sebagai callback hell:

javascript
login(user, () => {
  ambilProfil(() => {
    ambilPostingan(() => {
      // makin dalam, makin sulit dibaca
    });
  });
});

Inilah alasan Promise dan async/await diciptakan. Callback tetap penting dipahami karena ia fondasi keduanya.

Catatan teknis: Konvensi callback Node.js adalah error-first: callback(error, hasil). Jika operasi gagal, argumen pertama berisi error dan hasil null. Selalu cek error dulu di dalam callback sebelum memakai hasilnya.

Studi kasus: pipeline pengolahan data

Callback memungkinkan tahapan proses yang bisa diganti-ganti:

javascript
function pipeline(data, ...tahap) {
  let hasil = data;
  for (let fn of tahap) {
    hasil = fn(hasil);
  }
  return hasil;
}

let bersih = pipeline(
  "  HELLO world  ",
  s => s.trim(),
  s => s.toLowerCase(),
  s => s[0].toUpperCase() + s.slice(1)
);
console.log(bersih); // "Hello world"

Fungsi pipeline menerima data dan tahap-tahap berupa callback, lalu menjalankannya berurutan. Mau tambah tahap? Tinggal selipkan callback baru tanpa mengubah fungsi pipeline. Ini cikal bakal konsep middleware di framework backend.

Kesimpulan

Callback = "panggil fungsi ini saat selesai". Pahami polanya sampai mendarah daging karena Promise, async/await, event, dan array method semuanya dibangun di atas konsep ini.