Promise.all, Promise.allSettled, Promise.race ve Promise.any arasındaki fark nedir?
Cevap
Dördü de birden fazla promise'i birleştirir; fark, ne zaman tamamlandıkları ve hatayı nasıl ele aldıklarıdır.
| Metot | Ne zaman resolve olur | Ne zaman reject olur |
|---|---|---|
Promise.all | Hepsi başarılı olunca (sonuç dizisi) | İlk hata anında |
Promise.allSettled | Hepsi bitince (başarılı veya hatalı) | Hiçbir zaman |
Promise.race | İlk biten başarılıysa | İlk biten hatalıysa |
Promise.any | İlk başarılı olan | Hepsi hatalıysa (AggregateError) |
const [user, orders] = await Promise.all([
getUser(id),
getOrders(id),
]); // biri hata verirse catch'e düşer
const results = await Promise.allSettled(urls.map((u) => fetch(u)));
const ok = results.filter((r) => r.status === "fulfilled").map((r) => r.value);
// timeout kalıbı
const data = await Promise.race([
fetch(url),
new Promise((_, rej) => setTimeout(() => rej(new Error("timeout")), 2000)),
]);
// en hızlı yanıt veren mirror
const fastest = await Promise.any([fetch(m1), fetch(m2), fetch(m3)]);Önemli noktalar
Promise.allilk hatada reject olur ama diğer işleri iptal etmez; arka planda çalışmaya devam ederler. İptal içinAbortControllerkullanın. Modern Node.js'te timeout içinAbortSignal.timeout(2000)daha temizdir.- Sıralı
awaitile paralel çalışma farkı:
const a = await getA(); // 100ms
const b = await getB(); // 100ms -> toplam 200ms
const [a2, b2] = await Promise.all([getA(), getB()]); // toplam yaklaşık 100ms- Binlerce işi tek
Promise.allile başlatmak DB'yi veya dış API'yi boğabilir;p-limitgibi bir araçla eşzamanlılığı sınırlayın.
İlgili Node.js soruları
- cluster modülü ile worker_threads arasındaki fark nedir? Hangisini ne zaman kullanırsınız?
- Node.js event loop'u nasıl çalışır? libuv'nin rolü ve event loop aşamaları nelerdir?
- Node.js'te asenkron kodda hata yönetimi nasıl yapılır? unhandledRejection nedir?
- Node.js'te stream nedir? Türleri nelerdir ve backpressure ne demektir?
- process.nextTick, Promise.then, setImmediate ve setTimeout(fn, 0) hangi sırayla çalışır?
- Express.js'te middleware nedir ve nasıl çalışır?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.