Mengenal Promise di JavaScript: Menangani Asynchronous dengan Lebih Rapi

Pelajari cara kerja Promise di JavaScript sebagai solusi untuk callback hell. Pahami bagaimana Promise menangani proses asynchronous dengan lebih rapi dan mudah dibaca.

Setelah mempelajari callback function, kamu mungkin mulai menyadari bahwa struktur kode bisa menjadi rumit jika callback digunakan secara bertingkat. Inilah yang disebut sebagai callback hell.

Untuk mengatasi hal tersebut, JavaScript memperkenalkan fitur bernama Promise yang menjadi cara modern dalam menangani proses asynchronous.


🔍 Apa Itu Promise?

Promise adalah objek di JavaScript yang merepresentasikan hasil akhir dari operasi asynchronous, yang bisa:

  • Berhasil (fulfilled)
  • Gagal (rejected)
  • Atau masih dalam proses (pending)

Dengan Promise, kamu bisa menulis kode asynchronous yang:

  • Lebih bersih
  • Lebih mudah dibaca
  • Lebih mudah ditangani ketika terjadi error

🧠 Contoh Penggunaan Promise

1const janji = new Promise((resolve, reject) => {
2 const success = true;
3
4 if (success) {
5 resolve("Berhasil!");
6 } else {
7 reject("Gagal!");
8 }
9});
10
11janji
12 .then((hasil) => {
13 console.log(hasil); // "Berhasil!"
14 })
15 .catch((error) => {
16 console.error(error);
17 });
18
1const janji = new Promise((resolve, reject) => {
2 const success = true;
3
4 if (success) {
5 resolve("Berhasil!");
6 } else {
7 reject("Gagal!");
8 }
9});
10
11janji
12 .then((hasil) => {
13 console.log(hasil); // "Berhasil!"
14 })
15 .catch((error) => {
16 console.error(error);
17 });
18

📘 Penjelasan:

  • resolve() dipanggil jika proses berhasil
  • reject() dipanggil jika gagal
  • then() menangani hasil jika sukses
  • catch() menangani error jika gagal

⏱ Contoh dengan Proses Asynchronous

1function ambilData() {
2 return new Promise((resolve, reject) => {
3 setTimeout(() => {
4 const data = { nama: "Rizki" };
5 resolve(data);
6 }, 2000);
7 });
8}
9
10ambilData()
11 .then((data) => {
12 console.log("Data diterima:", data);
13 })
14 .catch((err) => {
15 console.error("Terjadi kesalahan:", err);
16 });
17
1function ambilData() {
2 return new Promise((resolve, reject) => {
3 setTimeout(() => {
4 const data = { nama: "Rizki" };
5 resolve(data);
6 }, 2000);
7 });
8}
9
10ambilData()
11 .then((data) => {
12 console.log("Data diterima:", data);
13 })
14 .catch((err) => {
15 console.error("Terjadi kesalahan:", err);
16 });
17

📝 Output setelah 2 detik:

1Data diterima: { nama: "Rizki" }
2
1Data diterima: { nama: "Rizki" }
2

🧩 Chain Promise (Menjalankan Secara Berurutan)

1function tambahSatu(angka) {
2 return new Promise((resolve) => {
3 resolve(angka + 1);
4 });
5}
6
7tambahSatu(5)
8 .then(tambahSatu) // 6
9 .then(tambahSatu) // 7
10 .then((hasil) => {
11 console.log("Hasil akhir:", hasil); // 7
12 });
13
1function tambahSatu(angka) {
2 return new Promise((resolve) => {
3 resolve(angka + 1);
4 });
5}
6
7tambahSatu(5)
8 .then(tambahSatu) // 6
9 .then(tambahSatu) // 7
10 .then((hasil) => {
11 console.log("Hasil akhir:", hasil); // 7
12 });
13

⚠️ Penanganan Error Lebih Baik

Salah satu kelebihan Promise adalah penanganan error global yang mudah dengan catch():

1ambilData()
2 .then((data) => {
3 throw new Error("Kesalahan pada data!");
4 })
5 .catch((err) => {
6 console.error("Error ditangani:", err.message);
7 });
8
1ambilData()
2 .then((data) => {
3 throw new Error("Kesalahan pada data!");
4 })
5 .catch((err) => {
6 console.error("Error ditangani:", err.message);
7 });
8

✨ Kesimpulan

Promise adalah solusi untuk menulis kode asynchronous yang lebih rapi dan tidak bersarang seperti callback. Dengan Promise, kamu bisa mengelola proses asynchronous dengan kontrol yang lebih baik, termasuk dalam penanganan error.

Langkah berikutnya dalam pemahaman asynchronous adalah mengenal async dan await, fitur sintaks modern JavaScript yang dibangun di atas Promise.