JavaScript Promise’ları: .all(), .allSettled(), .race() ve .any() Karşılaştırması
Merhaba! Fatih Soysal burada. Bu yazıda, JavaScript’te asenkron işlemleri yönetmek için kullanılan Promise nesnesinin .all(), .allSettled(), .race() ve .any() metodlarını detaylı bir şekilde inceleyeceğiz. Bu metodlar, birden fazla Promise’ın durumunu kontrol etmenizi ve işlemlerinizi buna göre yönetmenizi sağlar. Öncelikle, her bir metodun işlevini ayrıntılı olarak ele alalım, daha sonra da bunları karşılaştırarak kullanım senaryolarını açıklayacağız.
Promise.all(): Tüm Promise’lar Çözümlendiğinde
Promise.all() metodu, bir Promise dizisi alır ve bu dizideki tüm Promise’lar çözümlendiğinde (fulfilled) tek bir Promise döndürür. Bu tek Promise, tüm Promise’ların sonuçlarını bir dizi olarak içerir. Ancak, dizi içindeki tek bir Promise bile reddedilmişse (rejected), Promise.all() metodu da reddedilir ve diğer Promise’ların sonuçları göz ardı edilir. Bu nedenle, tüm işlemlerin başarılı olmasını beklediğiniz durumlar için uygundur.
Promise.all([
Promise.resolve(1),
Promise.resolve(2),
Promise.resolve(3)
]).then(results => {
console.log(results); // [1, 2, 3]
}).catch(error => {
console.error(error);
});
Promise.allSettled(): Tüm Promise’lar Tamamlandığında
Promise.allSettled() metodu, Promise.all()‘a benzer şekilde bir Promise dizisi alır. Ancak, burada önemli bir fark vardır: dizi içindeki Promise’lar reddedilmiş (rejected) olsa bile, Promise.allSettled() metodu her zaman çözümlenir (fulfilled). Döndürdüğü sonuç, her bir Promise’ın durumunu (fulfilled veya rejected) ve sonucunu veya hata mesajını içeren bir nesne dizisidir. Bu metod, her bir Promise’ın durumunu bilmeniz gereken senaryolar için oldukça kullanışlıdır.
Promise.allSettled([
Promise.resolve(1),
Promise.reject(new Error('Hata!')),
Promise.resolve(3)
]).then(results => {
console.log(results);
// [{status: "fulfilled", value: 1}, {status: "rejected", reason: Error: Hata!}, {status: "fulfilled", value: 3}]
}).catch(error => {
console.error(error); // Çalışmaz çünkü allSettled her zaman çözümlenir.
});
Promise.race(): İlk Tamamlanan Promise
Promise.race() metodu, bir Promise dizisi alır ve bu dizideki ilk tamamlanan (çözümlenen veya reddedilen) Promise’ın sonucunu döndürür. Diğer Promise’lar göz ardı edilir. Bu metod, birden fazla işlemden ilkinin sonucunu beklediğiniz durumlar için idealdir. Örneğin, birden fazla kaynaktan veri çekerken en hızlı kaynaktan gelen veriyi kullanmak isteyebilirsiniz.
Promise.race([
Promise.resolve(1).then(() => console.log("Birinci Promise")),
Promise.resolve(2).then(() => console.log("İkinci Promise")),
Promise.reject(new Error('Hata')).then(() => console.log("Üçüncü Promise"))
]).then(result => console.log(result))
.catch(error => console.error(error)); // ilk tamamlanan Promise'ın değeri veya hatası
Promise.any(): İlk Çözümlenen Promise
Promise.any() metodu, bir Promise dizisi alır ve bu dizideki ilk çözümlenen (fulfilled) Promise’ın sonucunu döndürür. Tüm Promise’lar reddedilmişse, bir AggregateError fırlatır. Bu metod, birden fazla yedekli işlemden en az birinin başarılı olmasını beklediğiniz durumlar için uygundur.
Promise.any([
Promise.reject(new Error('Hata 1')),
Promise.reject(new Error('Hata 2')),
Promise.resolve(3)
]).then(result => console.log(result)) // 3
.catch(error => console.error(error)); // AggregateError: Tüm Promise'lar reddedildi ise
Sonuç
Bu yazıda, JavaScript Promise’larının .all(), .allSettled(), .race() ve .any() metodlarını karşılaştırdık. Her metodun farklı bir kullanım senaryosu vardır ve doğru metodu seçmek, kodunuzun okunabilirliğini ve performansını artırır. Doğru metodu seçmek için, işlemlerinizin başarı veya başarısızlık durumlarını ve performans gereksinimlerini dikkatlice değerlendirmeniz önemlidir. Daha fazla JavaScript öğrenmek ve geliştirme konularında daha fazla bilgi için fatihsoysal.com sitesini ziyaret edebilirsiniz.
#Etiketler: JavaScript, Promise, .all, .allSettled, .race, .any, Asenkron Programlama, JavaScript Öğretici, Promise Metodları, JavaScript Promise Karşılaştırması
