Promises’i Keşfetmek: .all vs .allSettled / .race vs .any
JavaScript’te asenkron işlemleri yönetmek için kullanılan Promises, programlamamızı daha temiz ve düzenli hale getirir. Promise’ler bir işlemin başarı veya başarısızlık durumunu temsil eder. Birden fazla Promise’i yönetmek için, Promise’ler üzerinde çeşitli yöntemler kullanılabilir. Bu yöntemler arasında en yaygın kullanılanları .all, .allSettled, .race ve .any’dir.
.all ve .allSettled: Birden Fazla Promise’i Yönetmek
Hem .all hem de .allSettled, birden fazla Promise’i eş zamanlı olarak çalıştırmayı ve sonuçlarını toplamayı sağlar. Ancak, aralarında önemli bir fark vardır. .all yöntemi, tüm Promise’ler başarılı sonuçlandığında bir dizi halinde sonuçları döndürür. Bir Promise başarısız olursa, diğer Promise’ler yürütülse bile .all yöntemi bir hata fırlatır. Öte yandan .allSettled, tüm Promise’lerin sonuçlarını, başarılı olsun veya olmasın, bir dizi halinde döndürür. Bu, her Promise’in durumunu ayrı ayrı kontrol etmenize olanak sağlar.
Aşağıdaki örneklerde, iki Promise’in durumlarını ele alalım. İlk Promise başarılı olacak şekilde ayarlanmış, ikinci Promise ise hata fırlatacak şekilde tasarlanmıştır.
“`javascript
const promise1 = Promise.resolve(‘Başarı!’);
const promise2 = Promise.reject(‘Hata!’);
Promise.all([promise1, promise2])
.then(values => console.log(values)) // Çalışmaz, hata fırlatır
.catch(error => console.error(error)); // Hata yakalanır
Promise.allSettled([promise1, promise2])
.then(results => {
results.forEach(result => {
if (result.status === ‘fulfilled’) {
console.log(result.value); // ‘Başarı!’ yazdırır
} else {
console.error(result.reason); // ‘Hata!’ yazdırır
}
});
});
“`
Görüldüğü gibi, .all yöntemi hata durumunda hata fırlatır ve devam etmez. .allSettled ise her Promise’in sonuçlarını ayrı ayrı döndürerek, hangi Promise’in başarılı veya başarısız olduğunu kontrol etmemizi sağlar.
.race ve .any: İlk Başarı veya İlk Başarısızlık
.race ve .any, birden fazla Promise arasında bir yarış oluşturur. .race yöntemi, ilk başarılı olan Promise’in sonucunu döndürür. Diğer Promise’ler hala çalışıyor olsa bile, .race yöntemi ilk başarılı olanı döndürür ve diğerlerini iptal eder. .any yöntemi ise ilk başarılı olan Promise’in sonucunu döndürür. Diğer Promise’ler başarısız olsa bile, .any yöntemi ilk başarılı olanı döndürür ve diğerlerini iptal eder.
Aşağıdaki örneklerde, üç Promise’in durumu ele alalım. İlk Promise hızlı bir şekilde başarıya ulaşacak, ikinci Promise daha yavaş olacak ve üçüncü Promise ise hata fırlatacak şekilde tasarlanmıştır.
“`javascript
const promise1 = Promise.resolve(‘Hızlı Başarı!’);
const promise2 = new Promise(resolve => setTimeout(() => resolve(‘Yavaş Başarı!’), 2000));
const promise3 = Promise.reject(‘Hata!’);
Promise.race([promise1, promise2, promise3])
.then(value => console.log(value)) // ‘Hızlı Başarı!’ yazdırır
.catch(error => console.error(error)); // Çalışmaz, hata yakalanmaz
Promise.any([promise1, promise2, promise3])
.then(value => console.log(value)) // ‘Hızlı Başarı!’ yazdırır
.catch(error => console.error(error)); // Çalışmaz, hata yakalanmaz
“`
Görüldüğü gibi, hem .race hem de .any yöntemi ilk başarılı olan Promise’in sonucunu döndürür. .race, ilk başarılı olanı döndürürken, .any ise ilk başarılı olanı döndürür ve diğerlerinin başarısız olmasına aldırmaz.
Sonuç
Promise’leri yönetmek için .all, .allSettled, .race ve .any gibi çeşitli yöntemler kullanılabilir. Hangi yöntemi kullanacağınız, uygulamanızın gereksinimlerine bağlıdır. Eğer tüm Promise’lerin başarılı olmasını bekliyorsanız .all yöntemini kullanmalısınız. Eğer tüm Promise’lerin sonuçlarını kontrol etmek istiyorsanız .allSettled yöntemini kullanmalısınız. Eğer ilk başarılı olan Promise’in sonucunu almak istiyorsanız .race veya .any yöntemini kullanabilirsiniz.
Promise’ler JavaScript’te asenkron işlemleri yönetmek için güçlü bir araçtır. Bu yöntemleri öğrenerek kodunuzu daha temiz, düzenli ve okunabilir hale getirebilirsiniz.
Referanslar
Daha fazla bilgi edinmek için aşağıdaki kaynaklara göz atabilirsiniz:
#Etiketler: Promise, JavaScript, Asenkron, .all, .allSettled, .race, .any, Programlama