Penjelasan Sederhana Cara Menggunakan Await, Async, dan Promise

Robinson Ody
JavaScript Indonesia Community
4 min readMay 8, 2020

Dalam satu titik di perjalanan coding kita, pasti pernah datang satu hari di mana kita berpikir “harusnya 1 baris ini dijalankan setelah function di atasnya selesai”.

Dan saya mengerti betapa frustasinya mencari jalan keluar lain untuk mengatasi hal tersebut.

Kalau Anda sama dengan saya, callback function menjadi penyelamat pada situasi seperti itu.

Lalu setelah menggunakan callback sana sini, kita frustasi lagi karena sekarang kode kita jadi terlihat seperti cacing dan mata mulai perih karena fokus memperhatikan indentation di mana-mana.

Kondisi ini dikenal dengan sebutan callback-hell.

Mungkin tidak terlalu pusing kalau hanya segini, tapi bayangkan kalau satu function terdiri dari 100 kode dan 10 indentasi, bagaimana?

Yang tidak pernah dijelaskan di blog lain

Di momen pertama kali saya mengerti cara menggunakan Async-Await, saya sedikit kesal dengan blog-blog yang saya baca sebelumnya.

Kenapa? Karena mereka tidak memperkenalkan satu lagi elemen penting yang menunjang berhasil atau tidaknya kita menggunakan fitur ini.

Yaitu: Promise

Untuk bisa menggunakan async-await, kita harus mengerti kalau mereka bertiga diciptakan untuk digunakan secara bersamaan.

Banyak blog yang saya baca hanya menjelaskan dari async sampai await tanpa memberitahu kalau yang bisa di- await hanyalah function yang meng- return sebuah Promise.

Kita akan bahas satu per satu

1. Async

Segala function yang tidak diberi notasi async adalah synchronous function dan tidak bisa menggunakan await

Mengubah function menjadi async tidak akan membuat kode kita error.

Jadi mari kita pahami terlebih dahulu cara membuat sebuah function biasa menjadi sebuah async function.

Synchronous Function:

Synchronous Function

Asynchronous Function 1:

Asynchronous Function 1

Asynchronous Function 2:

Asynchronous Function 2

Perbedaannya hanya terletak pada satu buah kata yang kita letakkan di bagian deklarasi function.

Kalau kita sudah mengubah function menjadi async, artinya kita sekarang sudah bisa ‘menunggu’ sebuah function diselesaikan dengan notasi tambahan berikut:

2. Await

Sesuai dengan artinya, perintah ini memastikan sebuah function ditunggu hingga selesai sebelum function yang kita tulis dilanjutkan ke baris berikutnya.

Contoh penggunaan:

Jika function jalankan() kita panggil, maka output di console akan menjadi

Seperti yang sudah saya jelaskan, function jalankan() akan menunggu hingga function tunggu_saya() selesai baru menjalankan baris berikutnya.

Jika function jalankan() tidak dibuat menjadi async, output yang tercipta akan menjadi seperti ini

Nah, jadi bagaimana bisa program tahu bahwa function sudah selesai dijalankan?

Di sinilah peran Promise.

3. Promise

Promise itu sendiri sebenarnya sudah merupakan pembicaraan yang panjang.

Tapi singkatnya, Promise adalah sebuah object yang mempunyai callback yang berfungsi untuk memberitahu kalau function sudah selesai dijalankan.

Function dinyatakan selesai jika resolve() sudah dipanggil.

Sehingga await pada async function akan menunggu hingga resolve() dipanggil sebelum melanjutkan ke baris berikutnya.

Jika kita memberi await pada sebuah fungsi yang tidak mengembalikan Promise, maka tidak akan ada yang terjadi.

Fungsi tersebut tidak akan ditunggu dan kode akan terus dieksekusi.

Contoh Penggunaan: Fetch

Kalau Anda sama seperti saya, kita sering menggunakan fungsi-fungsi yang berisi Promise tanpa kita sadari. Contohnya: fetch

Fetch adalah sebuah fungsi yang mengembalikan Promise. Biasanya kita akan menuliskannya seperti ini

Pro Tip: Semua fungsi yang bisa menggunakan .then dan .catch adalah fungsi yang mengembalikan Promise

Dua kali fetch? Biasanya kita akan menuliskannya seperti ini.

Tapi bisakah kode ini menjadi lebih baik? (Dalam artian lebih mudah dibaca dan dipahami)

Karena jika tetap menuliskannya seperti ini, kita akan menggunakan banyak sekali .then dan .catch di sana dan di sini.

Dan inilah yang akan menggiring kita ke dalam callback-hell.

Untungnya, bisa.

Fetch dengan lebih baik

Menggunakan async-await, fungsi fetch di atas bisa kita ubah menjadi jauh lebih mudah dibaca.

Kunci perkembangannya di sini adalah: Readability

Hasilnya:

Dengan async-await, sekarang kita bisa melakukan bahkan 2x fetch tanpa tambahan indentasi dan kode kita jadi lebih mudah dimengerti.

Extra: Try-Catch

Pada contoh di atas selain menggunakan async-await saya juga menggunakan try-catch

Fungsinya agar saya bisa hanya menggunakan 1 catch untuk semua promise. Dan dengan block try catch tersebut.

Selain itu, saya juga sekarang bisa melakukan validasi hanya dengan 1 baris kode saja. Contoh:

Saya harap penjelasan super sederhana ini — atau setidaknya saya sudah berusaha membuatnya supersederhana, bisa membantu Anda sedikit lebih memahami tentang cara menggunakan async function pada kode Anda.

--

--