JavaScript-də Promise massivləri ilə işləmək
İndi biz Promise massivləri ilə işləməyə imkan verən
iki faydalı metodu nəzərdən keçirəcəyik.
Promise.all metodu ona massiv şəklində ötürülən
bütün Promise-lər bitdikdən sonra kodu icra etməyə imkan verir,
Promise.race metodu isə massivdən ilk yüklənən Promise-i
gözləyir, qalanları isə rədd edir.
Hər iki metod öz nəticəsi kimi yeni Promise qaytarır.
Promise.all metodu üçün bu Promise-in nəticəsi
bütün ötürülən Promise-lərin nəticələrinin massivi olacaq
(nəticələrin sırası massivdəki Promise-lərin sırasına uyğun gəlir),
Promise.race üçün isə - ilk işləyən Promise-in nəticəsi.
Gəlin praktikada baxaq. Tutaq ki, bizim Promise massivimiz var:
let promises = [
new Promise(resolve => setTimeout(() => resolve(1), 1000)),
new Promise(resolve => setTimeout(() => resolve(2), 2000)),
new Promise(resolve => setTimeout(() => resolve(3), 3000)),
];
Gəlin Promise.all ilə massivimizdəki
bütün Promise-lərin yüklənməsinin bitməsini gözləyək:
Promise.all(promises).then(function(res) {
console.log(res); // [1, 2, 3] - bütün Promise-lərin nəticələrini çap edəcək
});
İndi isə Promise.race ilə Promise-lərdən
birincisinin yüklənməsinin bitməsini gözləyək:
Promise.race(promises).then(function(res) {
console.log(res); // 1 - ilk icra olunan Promise-in nəticəsini çap edəcək
});
Əgər massivdəki Promise-lərdən hər hansı biri
rədd edilərsə, nəticə Promise-i dərhal
rejected vəziyyətinə keçəcək. Buna görə də
yaranan istisnanı adi, artıq öyrəndiyiniz üsulla,
məsələn, catch ilə tuta bilərsiniz:
Promise.all(promises).then(function(res) {
console.log(res);
}).catch(function(err) {
console.log(err);
});
İçərisində 1 ilə 10 saniyə arasında təsadüfi gecikmə təyin olunmuş
Promise qaytaran funksiya düzəldin. Promise öz nəticəsi kimi bu gecikməni qaytarsın.
Döngü və funksiyanızdan istifadə edərək massivi 10 Promise ilə doldurun.
Əvvəlki məsələdən olan Promise massivindən istifadə edərək ilk işləyən Promise-in nəticəsi konsola çıxarılacaq şəkildə edin.
Əvvəlki məsələdən olan Promise massivindən istifadə edərək bütün Promise-lərin nəticələrinin cəmi konsola çıxarılacaq şəkildə edin.