Рад са низовима промиса у 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

Користећи низ промиса из претходног задатка урадите тако да се у конзолу испише збир резултата свих промиса.