CodeBlanks Logo Icon CodeBlanks

Promise.race

Promise.race ile ilk biteni beklemeyi öğrenirsin.

Promise.race nedir?

Promise.race bir Promise dizisi alır ve ilk settled olanın (fulfilled veya rejected) sonuçunu döndürür. Yarış mantığıyla çalışır: ilk tamamlanan kazanır ve sonuçu tüm race çağrısının sonuçu olur. Diğer Promise'lar yine çalışır ama sonuçları yok sayılır.

Promise.race([fast, slow])
  .then(winner => console.log(winner));

Bu yöntem, özellikle bir işleme zaman aşımı koymak için kullanışlıdır: asıl işlemi bir zaman aşımı Promise'ı ile yarıştırırsın; zaman aşımı önce tamamlanırsa hata döner.

Zaman aşımı örüntüsü

Promise.race'in yaygın bir kullanımı, uzun süren işlemlere zaman aşımı uygulamaktır. Asıl işlemi, belirli bir süre sonra reddedilen bir timeout Promise'ı ile yarıştırırsın. İşlem zaman aşımından önce tamamlanırsa race onun sonuçuyla fulfilled olur; zaman aşımı önce tamamlanırsa race hata ile reddedilir.

function timeout(ms) {
  return new Promise((_, reject) =>
    setTimeout(() => reject(new Error("zaman aşımı")), ms)
  );
}

Burada timeout(1000) 1000 ms sonra reddedilir; asıl işlemle yarıştırınca işlem 1 saniyeden uzun sürerse hata alırsın.

Uygulama Sıra sende: Promise.race ile ilk sonuç

const fast = new Promise(res => setTimeout(() => res("hızlı"), 10)) ve const slow = new Promise(res => setTimeout(() => res("yavaş"), 50)) diye iki Promise oluştur. Promise.race([fast, slow]) çağır ve .then(winner => console.log(winner)) ile kazananı yazdır.

Başlangıç kodu

index.js
// fast ve slow Promise'ları oluştur
// Promise.race ile kazananı yazdır

Örnek çözüm

index.js
const fast = new Promise(res => setTimeout(() => res("hızlı"), 10));
const slow = new Promise(res => setTimeout(() => res("yavaş"), 50));
Promise.race([fast, slow]).then(winner => console.log(winner));

Beklenen çıktı

hızlı

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Promise.race kavramları

Kavram Anlamı
race ilk tamamlanan
timeout zaman aşımı
winner yarış kazananı

2 İki Promise'ten ilki reddedilirse Promise.race ne döndürür?

  • İkinci Promise'in sonuçunu bekler
  • Boş bir değer döner
  • O reddi hemen yayar Doğru cevap
  • Yeni bir Promise oluşturur

Açıklama: İlk settled eden reddiyse race de reddedilir.

3 Boşluğu doldur: Promise.race

Soru
const a = Promise.resolve("a");
const b = Promise.resolve("b");
____([a, b]).then(winner => console.log(winner));
Cevap
const a = Promise.resolve("a");
const b = Promise.resolve("b");
Promise.race([a, b]).then(winner => console.log(winner));

Açıklama: race ilk settled olanı döndürür.

Başlangıç bölümündeki tüm dersler