CodeBlanks Logo Icon CodeBlanks

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.

Başlangıç kodu

index.js
// p1 ve p2 Promise'ları oluştur
// Promise.all ile birleştir, .then ile toplamı yazdır

Örnek çözüm

index.js
const p1 = Promise.resolve(10);
const p2 = Promise.resolve(20);
Promise.all([p1, p2]).then(values => console.log(values[0] + values[1]));

Beklenen çıktı

30

Soru ve cevaplar

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

1 Promise.all ne zaman reddedilir?

  • İlk Promise tamamlayınca
  • Dizideki herhangi bir Promise reddedilince Doğru cevap
  • Tüm Promise'lar reddedilince
  • Tüm Promise'lar fulfilled olunca

Açıklama: İlk reddedilen Promise tüm zinciri reddeder.

2 Boşluğu doldur: Promise.all

Soru
const p1 = Promise.resolve(1);
const p2 = Promise.resolve(2);
____([p1, p2]).then(values => console.log(values));
Cevap
const p1 = Promise.resolve(1);
const p2 = Promise.resolve(2);
Promise.all([p1, p2]).then(values => console.log(values));

Açıklama: Promise.all tüm sonuçları dizi olarak verir.

3 Promise.all davranışları

Kavram Anlamı
Promise.all tümü bitince döner
paralel eşzamanlı çalışır
reddedilen biri tüm zinciri reddeder

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