Callback Javascript

Mengenal Callback Javascript

JavaScript adalah bahasa pemrograman yang sangat populer dan kuat yang digunakan dalam pengembangan web. Salah satu konsep yang penting dalam JavaScript adalah callback. Callback adalah fungsi yang diberikan sebagai argumen pada fungsi lain dan akan dieksekusi setelah fungsi tersebut selesai dijalankan. Dalam artikel ini, kita akan menjelaskan secara lengkap apa itu callback, bagaimana cara menggunakannya, dan mengapa ini penting dalam pengembangan JavaScript.

Apa Itu Callback?

Callback adalah salah satu konsep fundamental dalam JavaScript yang memungkinkan kita untuk mengendalikan alur eksekusi program. Callback adalah fungsi yang diberikan sebagai parameter ke fungsi lain. Fungsi yang menerima callback akan menjalankannya pada waktu yang ditentukan atau setelah suatu peristiwa tertentu terjadi. Contoh sederhana callback adalah:

function greeting(name, callback) {
  console.log(`Hello, ${name}!`);
  callback();
}

function sayGoodbye() {
  console.log("Goodbye!");
}

greeting("John", sayGoodbye);

Pada contoh di atas, sayGoodbye adalah callback yang akan dieksekusi setelah fungsi greeting selesai dijalankan.

Mengapa Kita Memerlukan Callback?

Callback sangat berguna dalam pengembangan JavaScript karena JavaScript adalah bahasa pemrograman asinkron. Ini berarti bahwa beberapa operasi dapat berjalan secara bersamaan tanpa harus menunggu operasi sebelumnya selesai. Contoh paling umum dari asinkronitas dalam JavaScript adalah pemanggilan AJAX, pengunduhan gambar, atau pengambilan data dari database.

Dalam situasi-situasi seperti itu, kita perlu menentukan tindakan yang akan diambil ketika operasi asinkron selesai. Itulah mengapa kita menggunakan callback. Callback memungkinkan kita untuk menangani operasi asinkron dengan menjalankan kode tertentu ketika operasi tersebut selesai atau mengembalikan hasilnya.

Jenis-jenis Callback

Ada dua jenis callback dalam JavaScript:

Synchronous Callback: Synchronous callback dieksekusi segera setelah fungsi yang menggunakannya selesai dijalankan. Contoh sederhana dari synchronous callback adalah:

function syncFunction(callback) {
  console.log("Before callback");
  callback();
  console.log("After callback");
}
syncFunction(() => {
  console.log("Inside callback");

Asynchronous Callback: Asynchronous callback dieksekusi nanti, setelah suatu peristiwa tertentu terjadi. Ini sangat berguna dalam situasi asinkron seperti pemanggilan AJAX atau pengunduhan gambar.

function asyncFunction(callback) {
       console.log("Before setTimeout");
       setTimeout(function () {
           callback();
       }, 2000);
       console.log("After setTimeout");
}
asyncFunction(() => {
      console.log("Inside callback");
});

Contoh Penggunaan Callback yang Umum

Pemanggilan AJAX: Callback sering digunakan untuk menangani respons dari permintaan AJAX. Kita dapat menentukan callback yang akan dijalankan ketika data dari server telah diterima.

function fetchData(url, callback) {
  // Mengirim permintaan AJAX
  // Ketika response diterima, menjalankan callback
  fetch(url)
    .then((response) => response.json())
    .then((data) => {
      callback(data);
    });
}
fetchData("https://api.example.com/data", (data) => {
  console.log(data);
});

Event Handling: Callback juga digunakan dalam penanganan peristiwa. Ketika suatu peristiwa terjadi, callback yang telah ditentukan akan dieksekusi.

document.querySelector("button").addEventListener("click", function () {
  console.log("Button clicked!");
});

Callback Hell (Pyramid of Doom)

Salah satu masalah yang sering muncul dalam penggunaan callback adalah callback hell, juga dikenal sebagai “pyramid of doom”. Ini terjadi ketika kita memiliki banyak callback bersarang dalam kode kita, yang membuatnya sulit dibaca dan dipelihara.

function fetchData(url, callback) {
  fetch(url)
    .then((response) => response.json())
    .then((data) => {
      processData(data, () => {
        displayData(data, () => {
          // ... dan seterusnya
        });
      });
    });
}

Untuk mengatasi masalah tadi, kita dapat menggunakan teknik seperti Promises atau async/await

Menggunakan Promises sebagai Alternatif Callback

Promises adalah cara modern untuk mengatasi asinkronisasi dalam JavaScript. Mereka memungkinkan kita untuk menulis kode yang lebih bersih dan mudah dibaca daripada callback hell.

function fetchData(url) {
  return fetch(url)
    .then((response) => response.json());
}

fetchData("https://api.example.com/data")
  .then((data) => {
    console.log(data);
  })
  .catch((error) => {
    console.error(error);
  });