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 v chyba.message.
  • try zachytí chybu objektu Promise jen tehdy, když na něj počkáte pomocí await uvnitř try.

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.

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

Zpět

8/9

Další