Wyjątkowe sytuacje w promisach w JavaScript
Nauczmy się teraz obsługiwać wyjątkowe sytuacje, które wystąpiły wewnątrz promisa. W przypadku wystąpienia takiej sytuacji powinniśmy odrzucić promisa za pomocą specjalnej funkcji odrzucenia, która automatycznie trafia do drugiego parametru funkcji promisa:
let promise = new Promise(function(resolve, reject) {
setTimeout(function() {
...
}, 3000);
});
Wewnątrz funkcji promisa powinniśmy wywołać
resolve, jeśli wszystko przebiegło normalnie, albo
reject, jeśli wystąpiła wyjątkowa
sytuacja:
let promise = new Promise(function(resolve, reject) {
setTimeout(function() {
let isError = false;
if (!isError) {
resolve([1, 2, 3, 4, 5]); // dane promisa
} else {
reject('error in promise'); // twój tekst błędu
}
}, 3000);
});
Następnie w metodzie then parametrami należy
przekazać nie jedną, ale dwie funkcje: pierwsza zadziała,
jeśli promis zadziałał normalnie (został rozwiązany),
a druga - jeśli zadziałał z błędem (został odrzucony):
promise.then(
function(result) {
console.log(result); // wyświetli wynik promisa
},
function(error) {
console.log(error); // wyświetli tekst błędu
}
);
Zazwyczaj powyższy kod zapisuje się bardziej zwięźle, w ten sposób:
promise.then(function(result) {
console.log(result); // wyświetli wynik promisa
}, function(error) {
console.log(error); // wyświetli tekst błędu
});
Stwórz asynchroniczny kod, który będzie generował
losowe liczby od 0 do 5.
Opakuj to wszystko w promisa. Niech promis swoim wynikiem
zwraca wynik dzielenia jedności przez wygenerowaną
liczbę. Niech promis wykona się z błędem,
jeśli nastąpiło dzielenie przez zero, i z sukcesem
we wszystkich pozostałych przypadkach.