JavaScript `Promise.any()`: Ambil Hasil Pertama yang Sukses
1
min read .
Updated on
Kadang, saya cuma butuh satu hasil sukses dari beberapa operasi asinkron, bukan semua. Kalau pakai Promise.all()
, mesti tunggu semuanya atau error. Nah, Promise.any()
bikin hidup lebih gampang: selesai segera begitu ada satu promise yang berhasil.
Apa Itu Promise.any()
?
Promise.any()
menerima iterable promise, dan:
- Resolve saat ada satu promise yang berhasil.
- Reject hanya kalau semua promise gagal, dengan
AggregateError
.
Promise.any([promise1, promise2, promise3]);
Contoh Penggunaan
1. Basic Example
const promise1 = Promise.reject('Gagal 1');
const promise2 = new Promise(res => setTimeout(res, 100, 'Sukses 2'));
const promise3 = new Promise(res => setTimeout(res, 200, 'Sukses 3'));
Promise.any([promise1, promise2, promise3])
.then(console.log) // "Sukses 2"
.catch(console.error);
2. Semua Promise Gagal → AggregateError
Promise.any([Promise.reject('Gagal1'), Promise.reject('Gagal2')])
.catch(console.error);
// AggregateError: All promises were rejected
3. Fetch dari Beberapa Endpoint
const urls = [
'https://jsonplaceholder.typicode.com/posts/1',
'https://jsonplaceholder.typicode.com/posts/2',
'https://jsonplaceholder.typicode.com/posts/3'
];
Promise.any(urls.map(u => fetch(u)))
.then(r => r.json())
.then(console.log)
.catch(err => console.error('Semua fetch gagal:', err));
Keuntungan Pakai Promise.any()
- Cepat: Resolve langsung saat ada satu sukses.
- UX Lebih Baik: Tidak menunggu semua request selesai.
- Kode Lebih Bersih: Nggak perlu manual cek tiap promise.
Kapan Gunanya?
- Network Resilience: Ambil data dari server terdekat/tercepat.
- Fallback: Coba beberapa opsi, ambil yang pertama berhasil.
- Race Conditions: Hanya butuh hasil tercepat.
Kesimpulan
Gini deh, Promise.any()
itu solusi tepat kalau kamu cuma butuh satu sukses dari banyak promise. Pada akhirnya, kode lebih cepat, simpel, dan lebih aman dari error tak terduga.