JavaScript
Paralel await
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
-
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.
-
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()]);
}
-
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
Sıradaki ders: await tümceleri