Callback & Pola Error-First

Memahami callback, konvensi error-first khas Node, dan masalah callback hell.

Part 8 dari 24 ± 30 menit Gratis

Callback: "hubungi aku kalau sudah selesai"

Callback adalah fungsi yang diberikan kepada fungsi lain untuk dipanggil nanti — biasanya saat operasi asinkron selesai. Ini cara paling dasar Node mengerjakan sesuatu tanpa menunggu.

setTimeout(() => {
  console.log('tiga detik kemudian');
}, 3000);
console.log('ini dijalankan lebih dulu');

Konvensi error-first

Hampir semua API asinkron Node memakai pola yang sama: argumen pertama callback adalah error, argumen berikutnya hasil.

const fs = require('fs');

fs.readFile('data.json', 'utf8', (err, isi) => {
  if (err) {                       // selalu periksa error PERTAMA
    console.error('Gagal membaca:', err.message);
    return;                        // hentikan; jangan lanjut memakai isi
  }
  console.log('Isi:', isi);
});
  • Sukses: callback(null, hasil) (error = null).
  • Gagal: callback(new Error('pesan')).
  • Callback dipanggil sekali saja.

Menulis fungsi ber-callback sendiri

function bagi(a, b, callback) {
  setTimeout(() => {
    if (b === 0) return callback(new Error('Tidak bisa dibagi nol'));
    callback(null, a / b);
  }, 10);
}

bagi(10, 2, (err, hasil) => {
  if (err) return console.error(err.message);
  console.log(hasil);   // 5
});

Perhatikan: callback dipanggil asinkron (lewat setTimeout) bahkan untuk kasus error. Pola penting: sebuah fungsi sebaiknya konsisten — selalu sinkron atau selalu asinkron, jangan campur ("Zalgo"), karena memanggil callback sinkron di satu kasus dan asinkron di kasus lain membuat perilaku sulit diprediksi.

Callback hell

Operasi berurutan yang saling bergantung membuat callback bersarang makin dalam:

ambilPengguna(1, (e1, user) => {
  ambilPesanan(user.id, (e2, pesanan) => {
    ambilBarang(pesanan[0], (e3, barang) => {
      // ... "piramida malapetaka"
    });
  });
});

Kode seperti ini sulit dibaca, error handling berulang, dan rawan bug. Solusinya: Promise dan async/await (bab berikutnya). Callback tetap penting dipahami karena banyak API dan pustaka lama memakainya.

Menangani error di callback

  • try/catch tidak menangkap error yang terjadi di dalam callback asinkron — kode sudah keluar dari blok try saat callback jalan. Itulah mengapa ada argumen err.
  • Error yang di-throw di dalam callback asinkron bisa mematikan seluruh proses.

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X