Работа со низи од ветувања во 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 ветувања.
Користејќи ја низата од ветувања од претходната задача направете така што во конзолата ќе се испечати резултатот на првото активирано ветување.
Користејќи ја низата од ветувања од претходната задача направете така што во конзолата ќе се испечати збирот на резултатите од сите ветувања.