Když se něco nepovede
Čekání nemusí dopadnout dobře: server neodpovídá, pizzerie má zavřeno, kupon už neplatí. Promise pak hodnotu nedostane a místo toho je odmítnutý (anglicky rejected) s chybou. await pak tuto chybu vyhodí, stejně jako chybu ve vašem kódu: zbytek funkce se neprovede a konzole chybu ukáže.
V tomto cvičení se hotová funkce overKupon() zeptá pizzerie na slevový kupon. Za sekundu vrátí slevu v procentech, nebo, pokud pizzerie kód nezná, selže s chybou, třeba Kupon ABC neexistuje. Uvnitř funkce se o odmítnutí postará reject(...).
Když chcete chybu zpracovat sami, dejte kód, který může selhat, do try a to, co se má stát, když selže, do catch:
try {
const sleva = await overKupon(kod);
zprava.textContent = `Máte slevu ${sleva} %!`;
} catch (chyba) {
zprava.textContent = chyba.message;
}JavaScript provede kód v try. Když všechno projde, catch přeskočí. Když některý řádek vyhodí chybu, skočí rovnou do catch a zbylé řádky v try se už neprovedou. Do závorek za catch dostanete chybu: objekt, jehož vlastnost message je její text. Konzole pak nic neukáže, protože jste chybu zpracovali.
Za catch můžete přidat ještě finally. Jeho kód proběhne na konci v obou případech, ať kód v try prošel, nebo selhal. Je to správné místo na úklid, třeba na opětovné zapnutí tlačítka:
try {
// To, co může selhat
} catch (chyba) {
// Co dělat, když to selže
} finally {
tlacitkoOverit.disabled = false;
}Časté chyby:
zprava.textContent = chyba;ukáže chybu i s jejím typem na začátku:Error: Kupon ABC neexistuje.Samotný text je vchyba.message.tryzachytí chybu objektu Promise jen tehdy, když na něj počkáte pomocíawaituvnitřtry.
Jak psát:
Pokyny
Když se klikne na tlacitkoOverit, ověřte kód napsaný v textovém poli vstupKupon: počkejte pomocí await na overKupon() a slevu ukažte v prvku zprava, například Máte slevu 10 %! pro kód PIZZA10.
Napište do textového pole kupon, který neexistuje, třeba ABC, a klikněte: stránka se nezmění a konzole ukáže chybu. Dejte řádky obsluhy, které čekají na overKupon() a ukazují slevu, do try a v catch ukažte v prvku zprava text chyby.
Zatímco pizzerie kupon ověřuje, ukažte Ověřujeme… a vypněte tlacitkoOverit. Zapněte ho zase ve finally, aby fungovalo, ať byl kupon platný, nebo ne.