JavaScript-те массив уәделерімен жұмыс
Қазір біз массив уәделерімен жұмыс істеуге мүмкіндік беретін
екі пайдалы әдісті қарастырамыз.
Promise.all әдісі оған массив түрінде берілген
барлық уәделердің аяқталуын орындауға мүмкіндік береді,
ал Promise.race әдісі массивтен бірінші уәденің
жүктелуін күтеді, қалғандарын елемейді.
Екі әдіс де өз нәтижесі ретінде жаңа уәде қайтарады.
Promise.all әдісі үшін бұл уәденің нәтижесі
берілген барлық уәделердің нәтижелерінің массиві болады
(нәтижелердің реті массивтегі уәделердің ретіне сәйкес келеді),
ал Promise.race үшін - бірінші орындалған уәденің нәтижесі.
Тәжірибеде қарастырайық. Бізде уәделер массиві бар делік:
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 көмегімен біздің массивіміздегі
барлық уәделердің жүктелуінің аяқталуын күтейік:
Promise.all(promises).then(function(res) {
console.log(res); // [1, 2, 3] шығарады - барлық уәделердің нәтижелері
});
Енді Promise.race көмегімен бірінші уәденің
жүктелуінің аяқталуын күтейік:
Promise.race(promises).then(function(res) {
console.log(res); // 1 шығарады - бірінші орындалған уәденің нәтижесі
});
Егер массивтегі уәделердің кем дегенде біреуі
қабылданбаса, онда нәтиже уәдесі бірден
rejected күйіне өтеді. Сондықтан
пайда болған ерекшелікті әдеттегі, сіз бұрын үйренген
әдіспен, мысалы, catch арқылы ұстауға болады:
Promise.all(promises).then(function(res) {
console.log(res);
}).catch(function(err) {
console.log(err);
});
Ішінде 1-ден 10-ға дейін кездейсоқ кідіріс
орнатылған уәде қайтаратын функция жасаңыз.
Уәде өз нәтижесі ретінде осы кідірісті қайтарсын.
Цикл және сіздің функцияңызды қолданып,
массивті 10 уәделермен толтырыңыз.
Алдыңғы тапсырмадағы уәделер массивін қолданып, бірінші орындалған уәденің нәтижесі консольге шығарылуы үшін жасаңыз.
Алдыңғы тапсырмадағы уәделер массивін қолданып, барлық уәделердің нәтижелерінің қосындысы консольге шығарылуы үшін жасаңыз.