0

Constructing Promise Object

 


Promise merupakan sebuah objek yang digunakan untuk membuat sebuah komputasi (kode) ditangguhkan dan berjalan secara asynchronous [5]. Untuk membuat objek promise, kita gunakan keyword new diikuti dengan constructor dari Promise:

  1. const coffee = new Promise();

Namun, jika kita jalankan kode tersebut akan mengakibatkan eror seperti ini:

  1. TypeError: Promise resolver undefined is not a function

Di dalam constructor Promise, kita perlu menetapkan resolver function atau bisa disebut executor function. Fungsi tersebut akan dijalankan secara otomatis ketika constructor Promise dipanggil.

  1. const executorFunction = (resolve, reject) => {
  2.     const isCoffeeMakerReady = true;
  3.     if (isCoffeeMakerReady) {
  4.         resolve("Kopi berhasil dibuat");
  5.     } else {
  6.         reject("Mesin kopi tidak bisa digunakan");
  7.     }
  8. }
  9.  
  10.  
  11. const makeCoffee = () => {
  12.     return new Promise(executorFunction);
  13. }
  14. const coffeePromise = makeCoffee();
  15. console.log(coffeePromise);
  16.  
  17.  
  18. /* output
  19. Promise { 'Kopi berhasil dibuat' }
  20. */

Executor function memiliki dua parameter, yaitu resolve dan reject yang berupa fungsi. Berikut penjelasan detailnya:

  • resolve() adalah parameter pertama pada executor function. Parameter ini merupakan fungsi yang dapat menerima satu parameter. Biasanya kita gunakan untuk mengirimkan data ketika promise berhasil dilakukan. Ketika fungsi ini terpanggil, kondisi Promise akan berubah dari pending menjadi fulfilled.

  • reject() adalah parameter kedua pada executor function. Parameter ini merupakan fungsi yang dapat menerima satu parameter dan digunakan untuk memberikan alasan kenapa Promise tidak dapat terpenuhi. Ketika fungsi ini terpanggil, kondisi Promise akan berubah dari pending menjadi rejected.

Executor function akan berjalan secara asynchronous hingga akhirnya kondisi Promise berubah dari pending menjadi fulfilled/rejected.

Pada contoh kode di atas, outputnya akan seperti ini:

  1. /* output
  2. Promise { 'Kopi berhasil dibuat' }
  3. */

Kenapa demikian? Executor function mengeksekusi resolve() dengan membawa data string “Kopi berhasil dibuat”. Jika kita ubah nilai dari variabel isCoffeeMakerReady menjadi false, maka executor function akan mengeksekusi reject() dengan membawa pesan penolakan “Mesin kopi tidak bisa digunakan”.

  1. /* output
  2. Promise { <rejected> 'Mesin kopi tidak bisa digunakan' }
  3. */

20210330173759620d656efdcd417ec3aeacaf9042e631.png

Dalam praktik aslinya, Promise digunakan untuk menjalankan proses asynchronous seperti mengambil data dari internet/API. Hasil permintaan data dapat terpenuhi atau mengalami kegagalan.

Output yang dihasilkan baik ketika fulfilled ataupun rejected masih berupa Promise, bukan nilai yang dibawa oleh fungsi resolve atau reject. Lantas bagaimana kita bisa mengakses nilai yang dibawa oleh fungsi-fungsi tersebut? Caranya adalah menggunakan method .then() yang tersedia pada objek Promise.

Posting Komentar
Theme
Share
Additional JS