JavaScript'te Promise Dizileriyle Çalışma
Şimdi, promise dizileriyle çalışmanıza izin veren iki kullanışlı metodu inceleyeceğiz.
Promise.all metodu, kendisine bir dizi olarak iletilen tüm promise'ler tamamlandığında kodu çalıştırmanıza izin verir,
Promise.race metodu ise dizideki ilk promise'in tamamlanmasını bekler ve diğerlerini atlar.
Her iki metod da sonuç olarak yeni bir promise döndürür.
Promise.all metodu için bu promise'in sonucu, iletilen tüm promise'lerin sonuçlarının bir dizisi olacaktır
(sonuçların sırası, dizideki promise'lerin sırasına karşılık gelir),
Promise.race için ise - ilk tamamlanan promise'in sonucu olacaktır.
Pratikte görelim. Bir promise dizimiz olduğunu varsayalım:
let promises = [
new Promise(resolve => setTimeout(() => resolve(1), 1000)),
new Promise(resolve => setTimeout(() => resolve(2), 2000)),
new Promise(resolve => setTimeout(() => resolve(3), 3000)),
];
Promise.all kullanarak dizimizdeki tüm promise'lerin yüklenmesinin tamamlanmasını bekleyelim:
Promise.all(promises).then(function(res) {
console.log(res); // [1, 2, 3] - tüm promise'lerin sonuçlarını verecek
});
Şimdi de Promise.race kullanarak promise'lerden ilkinin yüklenmesinin tamamlanmasını bekleyelim:
Promise.race(promises).then(function(res) {
console.log(res); // 1 - ilk tamamlanan promise'in sonucunu verecek
});
Dizideki promise'lerden en az biri reddedilirse, sonuç promise'i hemen
rejected durumuna geçecektir. Bu nedenle
oluşan istisna, normal, zaten öğrenmiş olduğunuz bir yolla, örneğin
catch ile yakalanabilir:
Promise.all(promises).then(function(res) {
console.log(res);
}).catch(function(err) {
console.log(err);
});
İçinde 1 ile 10 saniye arasında rastgele bir gecikme ayarlanmış bir promise döndüren bir fonksiyon yapın.
Promise, sonuç olarak bu gecikmeyi döndürsün.
Döngü ve fonksiyonunuzu kullanarak diziyi 10 promise ile doldurun.
Önceki görevdeki promise dizisini kullanarak, konsola ilk çalışan promise'in sonucunun yazdırılmasını sağlayın.
Önceki görevdeki promise dizisini kullanarak, konsola tüm promise'lerin sonuçlarının toplamının yazdırılmasını sağlayın.