Node.js
Promise.all
Promise.all ile paralel promise'ları öğrenirsin.
Promise.all nedir?
Birden fazla asenkron işi paralel başlatıp hepsinin bitmesini beklemek için Promise.all kullanırsın. Bir Promise dizisi alır ve hepsi fulfilled olduğunda her birinin sonuçunu içeren bir dizi döndürür. İşlemler paralel çalıştığı için toplam süre en yavaş olan kadar olur.
Promise.all([p1, p2, p3])
.then(values => console.log(values));
Önemli nokta: dizideki herhangi bir Promise rejected olursa, Promise.all anında o hatayla reddedilir; diğerleri tamamlansa bile sonuç dizisi oluşmaz. Tüm Promise'lar başarıyla tamamlanırsa sonuç dizisi gelir; biri bile reddedilirse hata döner.
Sonuç sırası
Promise.all'in döndürdüğü dizi, giriş dizisindeki Promise'ların sırasını korur. Yani ikinci Promise birinci olandan önce tamamlansa bile, sonuç dizisinde yine ikinci sırada yer alır. Bu özellik, paralel işlemlerin sonuçunu sırayla işlemen gerektiğinde kullanışlıdır.
Promise.all([p1, p2])
.then(values => console.log(values[0], values[1]));
Burada p1 ve p2 paralel çalışır; her ikisi de bitince sonuç dizisi [result1, result2] biçiminde gelir. Hız farkından etkilenmezsin; sıralama giriş dizisiyle aynı kalır.
Uygulama Sıra sende: Promise.all ile paralel
const p1 = Promise.resolve(10) ve const p2 = Promise.resolve(20) diye iki Promise oluştur. Promise.all([p1, p2]) çağır ve .then(values => console.log(values[0] + values[1])) ile toplamı yazdır.
Örnek çözümü göster
const p1 = Promise.resolve(10);
const p2 = Promise.resolve(20);
Promise.all([p1, p2]).then(values => console.log(values[0] + values[1]));
Kendini test et
-
Promise.all ne zaman reddedilir?
- İlk Promise tamamlayınca
- Dizideki herhangi bir Promise reddedilince
- Tüm Promise'lar reddedilince
- Tüm Promise'lar fulfilled olunca
Cevabı göster
Dizideki herhangi bir Promise reddedilince — İlk reddedilen Promise tüm zinciri reddeder.
-
Boşluğu doldur: Promise.all
const p1 = Promise.resolve(1);
const p2 = Promise.resolve(2);
____([p1, p2]).then(values => console.log(values));
Cevabı göster
const p1 = Promise.resolve(1);
const p2 = Promise.resolve(2);
Promise.all([p1, p2]).then(values => console.log(values));
-
Promise.all davranışları
- Promise.all
- tümü bitince döner
- paralel
- eşzamanlı çalışır
- reddedilen biri
- tüm zinciri reddeder
Sıradaki ders: Promise.race