Praca z tablicami obietnic w JavaScript
Teraz przeanalizujemy dwie przydatne metody,
pozwalające pracować z tablicami obietnic.
Metoda Promise.all pozwala wykonać
kod po zakończeniu wszystkich obietnic, przekazanych
jej w postaci tablicy, a metoda Promise.race
czeka na załadowanie pierwszej obietnicy z tablicy,
odrzucając pozostałe.
Obie metody swoim wynikiem zwracają nową
obietnicę. Dla metody Promise.all wynikiem
tej obietnicy będzie tablica wyników wszystkich
przekazanych obietnic (kolejność wyników
odpowiada kolejności obietnic w tablicy),
a dla Promise.race - wynik pierwszej
wykonanej obietnicy.
Spójrzmy w praktyce. Załóżmy, że mamy tablicę obietnic:
let promises = [
new Promise(resolve => setTimeout(() => resolve(1), 1000)),
new Promise(resolve => setTimeout(() => resolve(2), 2000)),
new Promise(resolve => setTimeout(() => resolve(3), 3000)),
];
Użyjmy Promise.all, aby poczekać
na zakończenie ładowania wszystkich obietnic z naszej
tablicy:
Promise.all(promises).then(function(res) {
console.log(res); // wypisze [1, 2, 3] - wyniki wszystkich obietnic
});
A teraz użyjmy Promise.race, aby poczekać
na zakończenie ładowania pierwszej z obietnic:
Promise.race(promises).then(function(res) {
console.log(res); // wypisze 1 - wynik pierwszej wykonanej obietnicy
});
Jeśli przynajmniej jedna z obietnic w tablicy zostanie
odrzucona, to obietnica z wynikiem natychmiast
przejdzie w stan rejected. Dlatego
powstały wyjątek można złapać zwyczajnym,
już przez was poznanym sposobem, na przykład, przez
catch:
Promise.all(promises).then(function(res) {
console.log(res);
}).catch(function(err) {
console.log(err);
});
Stwórz funkcję, zwracającą obietnicę, wewnątrz
której ustawione jest losowe opóźnienie od
1 do 10 sekund. Niech swoim
wynikiem obietnica zwraca to opóźnienie.
Za pomocą pętli i twojej funkcji wypełnij
tablicę 10 obietnicami.
Korzystając z tablicy obietnic z poprzedniego zadania spraw, aby w konsoli wypisał się wynik pierwszej wykonanej obietnicy.
Korzystając z tablicy obietnic z poprzedniego zadania spraw, aby w konsoli wypisała się suma wyników wszystkich obietnic.