CodeBlanks Logo Icon CodeBlanks

Promise.allSettled

JavaScript kursu · İleri seviye · Ders 72/100

Tüm promise'lar sonlanana kadar bekleyip her birinin sonucunu öğrenirsin.

Promise.allSettled

Promise.allSettled, kendisine verilen tüm promise'lar yerleşene (settle) kadar bekler. Bir promise reddedilse bile vazgeçmez; diğerlerini yine de tamamlar. Sonuç, her promise için bir nesne dizisidir: { status: 'fulfilled', value } ya da { status: 'rejected', reason }.

const results = await Promise.allSettled([
  fetch('/users'),
  fetch('/products')
]);

Birden çok API çağrısından bazıları başarısız olsa bile geri kalan sonuçları kaybetmezsin; her birini tek tek inceleyip başarılı olanları ayıklayabilirsin.

Sonuçları filtreleme

Her sonuç nesnesinin bir status özelliği vardır. 'fulfilled' ise value'yu, 'rejected' ise reason''u okursun. Başarılı sonuçları almak için diziyi .filter ile gezersin.

const ok = results.filter(r => r.status === 'fulfilled');
const values = ok.map(r => r.value);

Bu desen, kısmi başarılı toplu işlemlerde çok işe yarar: hangi çağrının geçtiğini, hangisinin geçemediğini ayrı ayrı görebilirsin.

Uygulama Başarılı çağrıları ayıkla

Üç promise tanımla: p1 ve p3 Promise.resolve ile bir değer döndürsün, p2 Promise.reject ile reddedilsin. Promise.allSettled ile üçünü birlikte bekle. Sonuçlardan yalnızca status === 'fulfilled' olanları .filter ile ayıkla ve console.log ile değerlerini yazdır.

Örnek çözümü göster
const p1 = Promise.resolve('user-1');
const p2 = Promise.reject('offline');
const p3 = Promise.resolve('user-3');
const results = await Promise.allSettled([p1, p2, p3]);
const ok = results.filter(r => r.status === 'fulfilled');
console.log(ok.map(r => r.value));

Kendini test et

  1. Promise.all ile Promise.allSettled arasındaki temel fark nedir?

    • İkisi de tamamen aynı şekilde davranır
    • allSettled her zaman daha hızlıdır
    • allSettled reddedilenleri de sonuçlara dahil eder
    • Promise.all tüm sonuçları döndürür
    Cevabı göster

    allSettled reddedilenleri de sonuçlara dahil eder — Doğru! allSettled reddedilen promise'ları da { status: 'rejected' } olarak sonuca ekler.

  2. Sonuç durumunu denetle

    const r = await Promise.allSettled([p1, p2]);
    if (r[0].____ === 'fulfilled') {
      console.log(r[0].value);
    }
    Cevabı göster
    const r = await Promise.allSettled([p1, p2]);
    if (r[0].status === 'fulfilled') {
      console.log(r[0].value);
    }
  3. Promise metodlarını eşleştir

    allSettled
    tümü yerleşir
    all
    ilk reddedilende durur
    race
    ilk yerleşeni alır
    any
    ilk başarılıyı alır

İleri seviye bölümündeki tüm dersler