Promise Lanjutan

Table of contents
Melanjutkan materi kemarin tentang Promise, Fetch, dan Async/Await, karena saya rasa konsep dasar tentang Promise sudah cukup dibahas sebelumnya.
Chaining dalam Promise
Sering kali, kita perlu menjalankan beberapa proses secara berurutan. Dalam Promise, kita bisa menggunakan chaining (.then()
berantai).
let URI_BASE = "https://jsonplaceholder.typicode.com";
fetch(`${URI_BASE}/posts/1`) // 1
.then((response) => response.json())
.then((result) => {
console.log("Data:", result.title); // 2
return fetch(`${URI_BASE}/users/${result.userId}`); // 3
})
.then((response) => response.json())
.then((user) => {
console.log(`Artikel ditulis oleh: ${user.name}`); // 4
})
.catch((error) => console.log(`Terjadi kesalahan: ${error.message}`)); // 5
Penjelasan
Mengambil data post pertama dari API.
Menampilkan judul post di console.
Mengambil data user berdasarkan
userId
.Menampilkan nama penulis post tersebut.
Menangani error jika terjadi masalah dalam proses pengambilan data.
Promise All
Promise.all()
digunakan untuk mengeksekusi beberapa Promise
secara paralel dan hanya akan berhasil jika semua promise berhasil (fulfilled). Jika salah satu Promise
gagal (rejected), maka seluruh operasi akan gagal.
const p1 = new Promise((resolve) => setTimeout(() => resolve("P1 selesai"), 1000));
const p2 = new Promise((resolve) => setTimeout(() => resolve("P2 selesai"), 2000));
const p3 = new Promise((resolve, reject) => setTimeout(() => reject("P3 gagal"), 1500));
Promise.all([p1, p2, p3])
.then(results => console.log(results))
.catch(error => console.log("Error:", error)); // Output: P3 gagal
Kesimpulan: Gagal jika ada satu Promise
yang gagal.
Promise Race
Promise.race()
mengembalikan hasil dari promise pertama yang selesai, baik itu resolve
atau reject
.
const p1 = new Promise((resolve) => setTimeout(() => resolve("P1 selesai"), 1000));
const p2 = new Promise((resolve) => setTimeout(() => resolve("P2 selesai"), 2000));
const p3 = new Promise((_, reject) => setTimeout(() => reject("P3 gagal"), 500));
Promise.race([p1, p2, p3])
.then(result => console.log("Race result:", result))
.catch(error => console.log("Race error:", error));
// Output: P3 gagal, lebih cepat selesai dengan reject
Kesimpulan: Mengambil promise pertama yang selesai, baik itu sukses atau gagal.
Promise Any
Promise.any()
mengembalikan promise pertama yang berhasil (fulfilled). Jika semua promise gagal (rejected), baru akan mengembalikan error.
const p1 = new Promise((_, reject) => setTimeout(() => reject("P1 gagal"), 1000));
const p2 = new Promise((resolve) => setTimeout(() => resolve("P2 selesai"), 2000));
const p3 = new Promise((_, reject) => setTimeout(() => reject("P3 gagal"), 500));
Promise.any([p1, p2, p3])
.then(result => console.log("Any result:", result)) // Output: P2 selesai
.catch(error => console.log("Any error:", error));
Jika semua gagal:
Promise.any([p1, p3])
.then(result => console.log("Any result:", result))
.catch(error => console.log("Any error:", error.errors));
// Menggunakan error.errors untuk melihat semua error
// Any error: [ 'P1 gagal', 'P3 gagal' ]
Kesimpulan: Mengembalikan promise pertama yang berhasil. Jika semua gagal, baru mengembalikan error.
Kesimpulan
Fungsi | Hasil |
Promise.all() | Menunggu semua promise selesai, gagal jika ada satu yang gagal |
Promise.race() | Mengembalikan hasil promise pertama yang selesai (fulfilled/rejected) |
Promise.any() | Mengembalikan promise pertama yang berhasil, gagal jika semua gagal |
Subscribe to my newsletter
Read articles from Dimas Rizki Mahendra directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Dimas Rizki Mahendra
Dimas Rizki Mahendra
PHP Developer