CodeBlanks Logo Icon CodeBlanks

Promise.any

JavaScript kursu · İleri seviye · Ders 73/100

Promise.any ile ilk başarılı promise'i yakalamayı öğrenirsin.

Promise.any

Promise.any, verilen promise'lar arasından ilk fulfill olanı döndürür. Reddedilenleri yok sayar; ta ki biri başarılı olana dek bekler. Bu özellik, birden çok yedek uçtan en hızlı cevap vereni seçmek için idealdir.

const winner = await Promise.any([
  fetch('/primary'),
  fetch('/backup')
]);

Eğer tüm promise'lar reddedilirse AggregateError fırlatır; bu hatanın .errors dizisinde her bir reddin sebebi bulunur.

AggregateError

Promise.any tüm promise'lar reddedilirse AggregateError fırlatır. Bu özel hata, her bir promise'ın reddetme sebebini .errors dizisinde toplar.

try {
  await Promise.any([p1, p2]);
} catch (e) {
  console.log(e.errors);
}

Bu sayede, hangi ucu neden kaybettiğini tek bir yerde görebilirsin; hata ayıklama kolaylaşır.

Uygulama Üç uçtan ilk başarılıyı al

primary, backup1 ve backup2 adında üç promise tanımla. primary 100ms sonra 'primary' değeriyle resolve olsun (setTimeout kullan). backup1 50ms sonra 'backup1' değeriyle resolve olsun. backup2 hemen Promise.reject ile reddedilsin. Promise.any ile ilk başarılı sonucu winner değişkenine al ve console.log ile yazdır.

Örnek çözümü göster
const primary = new Promise(r => setTimeout(r, 100, 'primary'));
const backup1 = new Promise(r => setTimeout(r, 50, 'backup1'));
const backup2 = Promise.reject('unavailable');
const winner = await Promise.any([primary, backup1, backup2]);
console.log(winner);

Kendini test et

  1. İlk başarılıyı yakala

    const fastest = await Promise.____([fetchA(), fetchB(), fetchC()]);
    Cevabı göster
    const fastest = await Promise.any([fetchA(), fetchB(), fetchC()]);
  2. Üç promise Promise.any'ye verildi ve üçü de reddedildi. Ne olur?

    • AggregateError fırlatılır
    • undefined döner
    • İlk reddedilenin sebebi döner
    • Boş bir dizi döner
    Cevabı göster

    AggregateError fırlatılır — Doğru! Tüm promise'lar reddedilirse Promise.any AggregateError fırlatır.

  3. Promise.any özelliklerini eşleştir

    ilk fulfill
    değeri döner
    tümü reject
    AggregateError
    reddedilenler
    yok sayılır
    yedek uçlar
    ilk gelen kazanır

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