Výjimečné situace v promisách v JavaScriptu
Nyní se naučme zacházet s výjimečnými situacemi, které nastaly uvnitř promisy. V případě vzniku takové situace musíme zamítnout promisu pomocí speciální funkce zamítnutí, která automaticky spadá do druhého parametru funkce promisy:
let promise = new Promise(function(resolve, reject) {
setTimeout(function() {
...
}, 3000);
});
Uvnitř funkce promisy musíme zavolat
resolve, pokud vše proběhlo normálně, nebo
reject, pokud nastala výjimečná
situace:
let promise = new Promise(function(resolve, reject) {
setTimeout(function() {
let isError = false;
if (!isError) {
resolve([1, 2, 3, 4, 5]); // data promisy
} else {
reject('error in promise'); // váš text chyby
}
}, 3000);
});
Poté v metodě then parametry musíte
předat ne jednu, ale dvě funkce: první se spustí,
pokud promisa fungovala normálně (byla resolve),
a druhá - pokud fungovala s chybou (byla reject):
promise.then(
function(result) {
console.log(result); // vypíše výsledek promisy
},
function(error) {
console.log(error); // vypíše text chyby
}
);
Zpravidla se výše uvedený kód zapisuje kompaktněji, takto:
promise.then(function(result) {
console.log(result); // vypíše výsledek promisy
}, function(error) {
console.log(error); // vypíše text chyby
});
Vytvořte asynchronní kód, který bude generovat
náhodná čísla od 0 do 5.
Zabalte vše do promisy. Nechť promisa svým výsledkem
vrací výsledek dělení jedničky vygenerovaným
číslem. Nechť se promisa splní s chybou,
pokud došlo k dělení nulou, a s úspěchem
ve všech ostatních případech.