Takip et

Promises’i Keşfetmek: .all vs .allSettled / .race vs .any

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

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.