Promises in JavaScript

2 min read 30-08-2024
Promises in JavaScript

Pendahuluan

Dalam dunia pengembangan web modern, JavaScript telah menjadi bahasa yang sangat penting. Salah satu fitur kuat JavaScript adalah Promises. Promises menyediakan cara yang elegan dan terstruktur untuk menangani operasi asinkron, yang merupakan operasi yang tidak terjadi secara langsung dan membutuhkan waktu untuk selesai. Bayangkan seperti memesan makanan di restoran, Anda memberi pesanan, tetapi makanan Anda belum tersedia saat itu. Begitu makanan Anda siap, pelayan akan memberi tahu Anda. Promises bekerja dengan cara yang sama, mereka menjanjikan hasil dari operasi asinkron di masa depan.

Memahami Promises

Promises adalah objek yang mewakili hasil akhir dari sebuah operasi asinkron. Mereka dapat berada dalam tiga keadaan:

  1. Pending: Ini adalah keadaan awal Promise, di mana operasi asinkron masih berlangsung.
  2. Fulfilled: Operasi asinkron telah berhasil diselesaikan dan Promise memiliki nilai hasil yang valid.
  3. Rejected: Operasi asinkron mengalami kesalahan dan Promise memiliki alasan kesalahan.

Membuat Promises

Kita dapat membuat Promise dengan menggunakan fungsi Promise(). Fungsi ini menerima fungsi callback sebagai argumen, yang memiliki dua parameter: resolve dan reject. Fungsi resolve dipanggil ketika operasi asinkron berhasil diselesaikan, sedangkan fungsi reject dipanggil jika terjadi kesalahan.

const myPromise = new Promise((resolve, reject) => {
  // Operasi asinkron
  setTimeout(() => {
    const data = "Data berhasil diambil";
    resolve(data); // Menjalankan operasi berhasil
  }, 2000); // Menunda selama 2 detik
});

// Menangani hasil Promise
myPromise
  .then((data) => {
    console.log("Data berhasil diterima:", data);
  })
  .catch((error) => {
    console.error("Terjadi kesalahan:", error);
  });

Kode di atas mensimulasikan operasi asinkron yang menunda 2 detik sebelum menyelesaikannya. Setelah 2 detik, fungsi resolve dipanggil dengan pesan "Data berhasil diambil". then() digunakan untuk menangani hasil yang sukses, sementara catch() menangani kesalahan.

Menangani Promise dengan .then() dan .catch()

  • .then() digunakan untuk menangani hasil yang sukses. Fungsi callback di dalam then() akan dijalankan jika Promise berhasil diselesaikan.
  • .catch() digunakan untuk menangani kesalahan. Fungsi callback di dalam catch() akan dijalankan jika Promise mengalami kegagalan.
myPromise.then((data) => {
  console.log("Data berhasil diterima:", data);
  return new Promise((resolve, reject) => {
    // Operasi asinkron kedua
    setTimeout(() => {
      resolve("Data tambahan berhasil diambil");
    }, 1000);
  });
})
.then((data2) => {
  console.log("Data tambahan diterima:", data2);
})
.catch((error) => {
  console.error("Terjadi kesalahan:", error);
});

Contoh ini menunjukkan bagaimana then() dapat digunakan secara berantai untuk menangani operasi asinkron yang bergantung satu sama lain.

Promise.all() dan Promise.race()

  • Promise.all(): Menggabungkan beberapa Promise dan menyelesaikan ketika semua Promise berhasil diselesaikan. Jika salah satu Promise gagal, seluruh Promise.all() akan gagal.
  • Promise.race(): Menggabungkan beberapa Promise dan menyelesaikan ketika salah satu Promise pertama menyelesaikannya, baik berhasil maupun gagal.
const promise1 = new Promise((resolve) => {
  setTimeout(() => {
    resolve("Promise 1 berhasil");
  }, 3000);
});

const promise2 = new Promise((resolve) => {
  setTimeout(() => {
    resolve("Promise 2 berhasil");
  }, 2000);
});

// Promise.all()
Promise.all([promise1, promise2])
  .then((results) => {
    console.log("Semua Promise berhasil:", results);
  })
  .catch((error) => {
    console.error("Terjadi kesalahan:", error);
  });

// Promise.race()
Promise.race([promise1, promise2])
  .then((result) => {
    console.log("Promise pertama yang selesai:", result);
  })
  .catch((error) => {
    console.error("Terjadi kesalahan:", error);
  });

Async/Await

async/await adalah sintaks yang lebih mudah dibaca dan ditulis untuk bekerja dengan Promises. Kata kunci async menandakan bahwa fungsi tersebut mengembalikan Promise, sedangkan await digunakan untuk menunggu hasil Promise sebelum melanjutkan eksekusi kode.

async function fetchData() {
  try {
    const response = await fetch("https://api.example.com/data");
    const data = await response.json();
    console.log("Data berhasil diambil:", data);
  } catch (error) {
    console.error("Terjadi kesalahan:", error);
  }
}

fetchData();

Kesimpulan

Promises adalah konsep fundamental dalam JavaScript modern. Mereka memungkinkan kita untuk menangani operasi asinkron dengan mudah dan terstruktur. Dengan memahami Promises, kita dapat membangun aplikasi web yang lebih kompleks dan responsif.

Latest Posts


Popular Posts