Skip to main content

Cara Membuat Callback Function di Javascript

Hal yang membuat bingung ketika kita bekerja dengan synchronous dan asynchronous program adalah bagaimana menangani suatu nilai yang didapatkan secara asynchronous pada program yang berjalan secara synchronous. 


Contohnya seperti kode berikut:

  1. const getCake = () => {

  2.  let cake = null;

  3.  console.log("Sedang membuat kue, silakan tunggu ....")

  4.  setTimeout(() => {

  5.    cake = "Kue Selesai!"

  6.  }, 3000)

  7.  return cake;

  8. }

  9.  

  10. const cake = getCake();

  11. console.log(cake);

  12.  

  13. /*output:

  14. Sedang membuat kue, silakan tunggu ....

  15. null

  16. */


Jika kita melakukan hal seperti ini untuk mencetak nilai cake yang sesungguhnya, maka hal tersebut tidak akan pernah terjadi. Karena seperti yang sudah kita ketahui fungsi setTimeout() tidak akan menghentikan JavaScript untuk mengeksekusi kode yang ada selanjutnya. Jadi fungsi getCake() akan selalu mengembalikan nilai null, karena kode return cake akan dieksekusi terlebih dahulu dibandingkan dengan cake = “Kue Selesai!”. Kode asynchronous perlu disusun dengan cara yang berbeda dari synchronous code. Cara paling dasar adalah dengan menggunakan callback function.
Apa itu callback function? Mari kita bayangkan kembali melalui pandangan dunia nyata. Kita menunggu pesanan kopi datang di meja kita tapi , pada saat itu juga kita tidak bisa berada terus di tempat itu karena ada urusan mendadak. Pada kasus ini mungkin terdapat dua aksi yang bisa kita lakukan:
  • (Synchronous) Kita tetap menunggu di meja hingga kopi itu datang dan kemudian meninggalkan kedai kopi.
  • (Asynchronous) Kita meminta tolong kepada teman kita untuk menerima kopi itu, dan bertemu nanti untuk memberikan kopinya. Sehingga kita tidak perlu menunggu untuk meninggalkan kedai kopi.
Nah pada JavaScript, teman kita berperan layaknya callback function. Ia diperintahkan pada sebuah fungsi asynchronous kemudian akan dipanggil/digunakan ketika tugas itu selesai.
Bagaimana cara melakukannya? Yang pertama kita tambahkan parameter dengan nama callback pada fungsi asynchronous.

  1. const getCake = callback => {

  2.  let cake = null;

  3.  console.log("Sedang membuat kue, silakan tunggu ....")

  4.  setTimeout(() => {

  5.    cake = "Kue Selesai!";

  6.  }, 3000)

  7.  return cake;

  8. }


Kemudian kita panggil/gunakan callback yang diisikan dengan data yang akan dibawa (cake) ketika task selesai dilakukan.

  1. setTimeout(function() {

  2.    cake = "Kue Selesai!";

  3.    callback(cake);

  4. }, 3000)


Setelah menggunakan callback, fungsi tidak perlu lagi mengembalikan nilai. Sehingga kita bisa hapus kode return cake;. Sehingga keseluruhan fungsi akan tampak seperti ini:

  1. const getCake = callback => {

  2.  let cake = null;

  3.  console.log("Sedang membuat kue, silakan tunggu ....")

  4.  setTimeout(() => {

  5.    cake = "Kue Selesai!";

  6.    callback(cake);

  7.  }, 3000)

  8. }


Kemudian untuk menggunakan fungsi getCake, kita ubah kode dari:

  1. const cake = getCake();

  2. console.log(cake);


Menjadi:

  1. getCake(cake => {

  2.  console.log(cake);

  3. })


Sehingga ketika dijalankan akan sesuai dengan harapan kita.

  1. const getCake = callback => {

  2.  let cake = null;

  3.  console.log("Sedang membuat kue, silakan tunggu ....")

  4.  setTimeout(() => {

  5.    cake = "Kue Selesai!";

  6.    callback(cake);

  7.  }, 3000)

  8. }

  9.  

  10. getCake(cake => {

  11.  console.log(cake);

  12. })

  13.  

  14. /* output:

  15. Sedang membuat kue, silakan tunggu ....

  16. ---- setelah 3 detik ----

  17. Kue Selesai!

  18. */



Callback Hell

Kita sudah mengetahui bahwa callback dibutuhkan untuk mendapatkan nilai yang berasal dari asynchronous function. Lantas bagaimana jika terdapat proses satu sama lain yang saling bergantungan? Contohnya, untuk membuat kue tahapan yang perlu kita lakukan adalah:
  1. Mempersiapkan bahan
  2. Membuat adonan
  3. Menyiapkan adonan ke cetakan
  4. Memanggang adonan
Tahapan tersebut sangat tergantung satu sama lain. Kita tidak bisa memanggang adonan sebelum membuat adonannya, dan kita tidak bisa membuat adonan tanpa mempersiapkan bahannya terlebih dahulu. Jika seluruh tahapan tersebut berjalan secara synchronous, mungkin kita bisa melakukanya seperti ini:

  1. function makeACake(...rawIngredients) {

  2.  const ingredients = gatheringIngredients(rawIngredients),

  3.  dough = makeTheDough(ingredients),

  4.  pouredDough = pourDough(dough),

  5.  cake = bakeACake(pourDough),

  6.  console.log(cake);

  7. }


Namun jika fungsi-fungsi tersebut berjalan secara asynchronous, maka kita akan membuat yang namanya callback hell. Callback hell terjadi karena banyak sekali callback function yang bersarang karena saling membutuhkan satu sama lain, sehingga kode akan tampak seperti ini:

  1. function makeACake(...rawIngredients) {

  2.  gatheringIngredients(rawIngredients, function(ingridients) {

  3.    makeTheDough(ingridients, function(dough) {

  4.      pourDough(dough, function(pouredDough) {

  5.        bakeACake(pouredDough, function(cake) {

  6.          console.log(cake);

  7.        });

  8.      });

  9.    });

  10.  });

  11. }


Melihat kode seperti ini saja, kepala jadi pusing. Terbayang sulitnya memelihara kode ini di masa yang akan datang.
Lantas apa solusi agar kita dapat menghindari callback hell? Salah satunya adalah dengan menggunakan Promise.

  1. function makeACake(...rawIngredients) {

  2.  gatheringIngredients(rawIngredients)

  3.  .then(makeTheDough)

  4.  .then(pourDough)

  5.  .then(bakeACake)

  6.  .then(console.log);

  7. }


Dengan Promise, kita dapat meminimalisir callback hell dan mengubahnya menjadi kode yang sangat mudah dibaca. Bahkan dengan kode seperti itu, non-developer pun dapat mengerti apa maksud dari kode tersebut

Popular posts from this blog

Blogger: The Ins And Outs

Blogging adalah semua kemarahan saat ini. Ini adalah cara yang menyenangkan dan murah untuk membuat suara Anda terdengar di Internet. Melalui blogging, Anda dapat membuat pemikiran harian Anda (intim atau tidak) diketahui publik – dan dengan audiens yang lebih besar. Ini membuat layanan ini bagus untuk menyimpan buku harian (jika membuat buku harian publik adalah pilihan terbaik Anda), pemasaran (blogging adalah cara yang bagus untuk melakukan pemasaran – lebih dari itu nanti), dan berbagi informasi dan memperbarui. Mengapa Blog? Blogging adalah cara hidup. Ini mungkin salah satu kekuatan teknologi yang paling memungkinkan untuk menghantam Internet dalam beberapa tahun terakhir. Anehnya, itu telah memungkinkan keterlibatan yang lebih besar dari orang-orang dengan teknologi dan informasi. Hal yang hebat tentang blogging adalah mudah dipelajari dan mudah digunakan – terutama dengan layanan blogging seperti Blogger. Blog adalah, dalam pengertian teknis, perangkat lunak manajemen konten ya...

Blog cara Anda untuk mendapatkan keuntungan

Semua orang telah mengambil tren blogging. Dan blogging telah mengambil skema menghasilkan uang. Jika Anda memiliki blog dan belum menggunakannya untuk menghasilkan uang secara online, maka Anda akan ditinggalkan oleh orang lain yang sudah mendapatkan keuntungan yang baik dari blog. Bagaimana mereka melakukannya? Menjual iklan melalui blog. Ini adalah cara paling umum untuk membuat blog menghasilkan pendapatan. Prosesnya sederhana. Jika blog Anda adalah salah satu yang lebih terkenal dan banyak dibaca, Anda dapat menjual ruang iklan sendirian. Tetapi untuk blog yang tidak begitu terkenal, ada layanan yang dapat digunakan untuk membuat program iklan. Yang banyak digunakan adalah Adsense. Adsense memungkinkan Anda memilih beberapa iklan yang agak terkait dengan isi situs Anda. Anda kemudian dibayar berdasarkan jumlah pembaca yang mengklik iklan untuk memeriksanya. Mengapa orang memilih Adsense adalah karena mereka bisa mendapatkannya secara gratis. Blog sebagai program afiliasi. Ini adal...

Blog Jalan Anda ke Bank

Blog Jalan Anda ke Bank Pernahkah Anda mendengar tentang Ledakan Pemasaran Blog? Blog adalah weblog, diperbarui mingguan atau harian. Ini adalah buku harian atau jurnal online. Blog memiliki menjadi lebih populer daripada situs web. Tidak perlu tahu HTML, tidak perlu mengatur file seperti pustakawan, tidak perlu mendesain halaman web! Kalian semua yang harus Anda lakukan adalah menulis apa pun yang muncul di pikiran Anda (saat Anda menulis buku harian atau jurnal ) dan blog di server blog gratis, seperti http://www.blogger.com/ atau http://www.wordpress.com/ ! Lihat! Anda telah membuat blog, yang anak cucu dapat menikmati. Anda telah bergabung dengan jajaran terpilih Dante, Shakespeare dan Goethe! Mesin pencari menyukai konten asli yang segar dan jika Anda dapat memberikan yang baik konten, blog Anda akan populer. Apa pun yang Anda tulis di blog atau situs Anda akan dibaca oleh mesin pencari. Menyediakan konten yang baik adalah tugas Anda. NS mesin pencari akan memastikan lalu lintas y...