Promise.race
- Node.js kursu
- Başlangıç
- Ders 91/116
- 5 dk
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
// fast ve slow Promise'ları oluştur
// Promise.race ile kazananı yazdırÖrnek çözüm
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
const a = Promise.resolve("a");
const b = Promise.resolve("b");
____([a, b]).then(winner => console.log(winner));
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.