Работа со низи од ветувања во JavaScript

Сега ќе разгледаме два корисни методи, кои овозможуваат работа со низи од ветувања. Методот Promise.all овозможува извршување на кодот по завршувањето на сите ветувања, предадени му во вид на низа, а методот Promise.race чека вчитувањето на првото ветување од низата, отфрлајќи ги останатите.

И двата метода со својот резултат враќаат ново ветување. За методот Promise.all резултатот на ова ветување ќе биде низа од резултатите на сите предадени ветувања (редоследот на резултатите одговара на редоследот на ветувањата во низата), а за Promise.race - резултатот на првото активирано ветување.

Да погледнеме во пракса. Да претпоставиме дека имаме низа од ветувања:

javascriptlet promises = [
  new Promise(resolve => setTimeout(() => resolve(1), 1000)),
  new Promise(resolve => setTimeout(() => resolve(2), 2000)),
  new Promise(resolve => setTimeout(() => resolve(3), 3000)),
];

Да го искористиме Promise.all за да дочекаме завршување на вчитувањето на сите ветувања од нашата низа:

javascriptPromise.all(promises).then(function(res) {
  console.log(res); // ќе испише [1, 2, 3] - резултати од сите ветувања
});

А сега да го искористиме Promise.race за да дочекаме завршување на вчитувањето на првото од ветувањата:

javascriptPromise.race(promises).then(function(res) {
  console.log(res); // ќе испише 1 - резултат на првото исполнето ветување
});

Ако барем едно од ветувањата во низата ќе биде одбиено, тогаш ветувањето со резултат веднаш ќе премине во состојба rejected. Затоа појавениот исклучок може да се фати со вообичаен, веќе изучен начин, на пример, преку catch:

javascriptPromise.all(promises).then(function(res) {
  console.log(res);
}).catch(function(err) {
  console.log(err);
});
Задание 1

Направете функција која враќа ветување, внатре во која е поставена случајна одложка од 1 до 10 секунди. Нека со својот резултат ветувањето ја враќа оваа одложка. Со помош на циклус и вашата функција пополнете низа со 10 ветувања.

Задание 2

Користејќи ја низата од ветувања од претходната задача направете така што во конзолата ќе се испечати резултатот на првото активирано ветување.

Задание 3

Користејќи ја низата од ветувања од претходната задача направете така што во конзолата ќе се испечати збирот на резултатите од сите ветувања.