CodeBlanks Logo Icon CodeBlanks

Paralel await

JavaScript kursu · Orta seviye · Ders 81/134

Promise.all ve await kullanarak birden fazla işlemi paralel yönetmeyi öğrenirsin.

Promise.all ile paralel await

Birden fazla promise'i sırayla await edersen toplam süre her birinin süresi kadardır. Oysa hepsini aynı anda başlatıp Promise.all ile beklersen toplam süre en yavaş olan kadar olur.

async function loadDashboard() {
  const [user, posts] = await Promise.all([
    fetchUser(),
    fetchPosts()
  ]);
}

Burada iki istek paralel başlar; Promise.all ikisi de çözümlenene kadar bekler. Sonuçlar dizi sırasına göre destructuring ile alınır.

const [user, posts] = ... yazımı dizinin ilk iki elemanını sırayla iki değişkene atar (dizi ayrıştırma); ileri seviyede ayrıntılı göreceksin.

Sıralı await neden yavaş?

İki await ardarda yazıldığında JavaScript ikinci promise'i birinci çözümlenene kadar başlatmaz. Bu, bağımsız işlemlerde zaman kaybı yaratır. Eğer iki isteğin birbirine bağlı değilse Promise.all ile paralel çalıştırırsın.

// Sıralı: toplam süre p1 + p2
const a = await p1();
const b = await p2();
// Paralel: toplam süre max(p1, p2)
const [a, b] = await Promise.all([p1(), p2()]);

İki yöntemin sonucu aynıdır; yalnızca hız farkı vardır.

Uygulama Paralel veri yükle

async function loadDashboard() yaz. İçinde await Promise.all([fetchUser(), fetchPosts()]) çağırıp sonucu [user, posts] olarak destructuring ile al.

Örnek çözümü göster
async function loadDashboard() {
  const [user, posts] = await Promise.all([
    fetchUser(),
    fetchPosts()
  ]);
}

Kendini test et

  1. Hangisi iki isteği paralel yapar?

    // A: sıralı
    const a = await p1(); const b = await p2();
    // B: paralel
    const [a, b] = await Promise.all([p1(), p2()]);
    • Yalnız A (sıralı await)
    • Yalnız B (Promise.all)
    • İkisi de paralel çalışır
    • İkisi de sıralı çalışır
    Cevabı göster

    Yalnız B (Promise.all) — Doğru! Promise.all iki promise'i aynı anda başlatır; sıralı await paralel değildir.

  2. Promise.all ekle

    async function loadDashboard() {
      const [user, posts] = await ____([fetchUser(), fetchPosts()]);
    }
    Cevabı göster
    async function loadDashboard() {
      const [user, posts] = await Promise.all([fetchUser(), fetchPosts()]);
    }
  3. Paralel ve sıralı await'i eşleştir

    await Promise.all([p1(), p2()])
    paralel yürütür
    await p1(); await p2();
    sıralı yürütür
    Promise.race([p1(), p2()])
    ilk çözümlenen döner
    const [a, b] = await ...
    sonuçları dizi sırasıyla alır

Orta seviye bölümündeki tüm dersler