Apps Artificial Intelligence CSS DevOps Go JavaScript Laravel Linux MongoDB MySQL PHP Python Rust Vue

JavaScript `Promise.allSettled()`: Tangani Banyak Promise Tanpa Pusing

1 min read .
JavaScript `Promise.allSettled()`: Tangani Banyak Promise Tanpa Pusing

Kadang, saya harus nge-handle banyak operasi asinkron sekaligus, ribet kalau salah satu gagal dan bikin seluruh proses berhenti. Nah, Promise.allSettled() hadir buat ngeatasi masalah itu. Dengan ini, kita bisa tahu hasil semua promise, entah sukses atau gagal, tanpa bikin aplikasi berhenti tiba-tiba.

Apa Itu Promise.allSettled()?

Promise.allSettled() menerima iterable (misal array) berisi promise, lalu mengembalikan satu promise yang selesai setelah semua promise di dalamnya terselesaikan, baik fulfilled maupun rejected.

Promise.allSettled([promise1, promise2, promise3]);

Hasilnya berupa array objek { status, value/reason }.

Kenapa Pakai Promise.allSettled()?

  • Tangani Semua Hasil: Tidak seperti Promise.all() yang gagal langsung kalau ada satu promise error.
  • Meningkatkan Keandalan: Cocok buat nge-aggregate data dari banyak sumber, ada yang gagal nggak masalah.
  • Error Handling Simpel: Nggak perlu banyak try-catch tiap promise.

Contoh Penggunaan

1. Basic Usage

const promise1 = Promise.resolve('Sukses');
const promise2 = Promise.reject('Error');
const promise3 = Promise.resolve('Sukses lagi');

Promise.allSettled([promise1, promise2, promise3])
  .then(results => console.log(results));

2. Handle Result dan Error

const urls = ['api1', 'api2', 'api3'].map(u => fetch(u));

Promise.allSettled(urls)
  .then(results => {
    results.forEach(r => {
      if (r.status === 'fulfilled') console.log('Data:', r.value);
      else console.log('Error:', r.reason);
    });
  });

3. Dengan Async/Await

async function fetchAll() {
  const urls = ['api1', 'api2', 'api3'].map(u => fetch(u));
  const results = await Promise.allSettled(urls);
  
  results.forEach(r => r.status === 'fulfilled' ? console.log(r.value) : console.log(r.reason));
}

fetchAll();

4. Mixed Success & Failure

const tasks = [
  new Promise(res => setTimeout(res, 100, 'Task 1 selesai')),
  new Promise((_, rej) => setTimeout(rej, 200, 'Task 2 gagal')),
  new Promise(res => setTimeout(res, 300, 'Task 3 selesai'))
];

Promise.allSettled(tasks).then(console.log);

Beda dengan Promise Lain

Method Sifat
Promise.all() Gagal kalau ada satu promise gagal.
Promise.any() Sukses kalau satu promise berhasil, gagal kalau semua gagal.
Promise.race() Hasil dari promise pertama yang selesai, sukses atau gagal.

Kesimpulan

Gini deh, kalau kamu sering harus nge-handle banyak promise, Promise.allSettled() bikin hidup lebih gampang. Kamu bisa tahu hasil semua promise, sambil tetap aman dari error yang bikin crash. Pada akhirnya, kode jadi lebih reliabel dan mudah dibaca.

Lihat Juga

chevron-up