Wenn etwas fehlschlägt
Warten geht nicht immer gut aus: Der Server antwortet nicht, die Pizzeria hat geschlossen, der Gutschein ist abgelaufen. Dann bekommt das Promise keinen Wert, sondern wird mit einem Fehler abgelehnt (englisch „rejected“). await wirft den Fehler dann, genau wie einen Fehler in deinem Code: Der Rest der Funktion läuft nicht, und die Konsole zeigt den Fehler.
In dieser Übung fragt die fertige Funktion pruefeGutschein() die Pizzeria nach einem Gutschein. Eine Sekunde später gibt sie den Rabatt in Prozent zurück oder, bei einem Code, den die Pizzeria nicht kennt, schlägt sie mit einem Fehler fehl, etwa Der Gutschein ABC existiert nicht. In der Funktion lehnt reject(...) das Promise ab.
Um den Fehler selbst zu behandeln, schreibe den Code, der fehlschlagen kann, in try und das, was bei einem Fehlschlag passieren soll, in catch:
try {
const rabatt = await pruefeGutschein(code);
meldung.textContent = `Du bekommst ${rabatt} % Rabatt!`;
} catch (fehler) {
meldung.textContent = fehler.message;
}JavaScript führt den Code in try aus. Wenn alles funktioniert, überspringt es catch. Wenn eine Zeile einen Fehler wirft, springt es sofort zu catch, und die übrigen Zeilen in try laufen nicht. In den Klammern nach catch bekommst du den Fehler: ein Objekt, dessen Eigenschaft message sein Text ist. Die Konsole zeigt dann nichts, weil du den Fehler behandelt hast.
Nach catch kannst du finally anfügen. Sein Code läuft am Ende in beiden Fällen, ob der Code in try funktioniert hat oder fehlgeschlagen ist. Das ist der richtige Ort zum Aufräumen, zum Beispiel um einen Button wieder zu aktivieren:
try {
// Was fehlschlagen kann
} catch (fehler) {
// Was bei einem Fehlschlag passieren soll
} finally {
pruefenButton.disabled = false;
}Typische Fehler:
meldung.textContent = fehler;zeigt den Fehler mit seinem Typ davor:Error: Der Gutschein ABC existiert nicht.Den Text allein enthältfehler.message.tryfängt den Fehler eines Promise nur dann, wenn du innerhalb vontrymitawaitauf das Promise wartest.
So schreibst du es:
Anweisungen
- 1
Prüfe, wenn auf
pruefenButtongeklickt wird, den Code, der ingutscheinInputeingegeben wurde: Warte mitawaitaufpruefeGutschein()und zeige den Rabatt inmeldungan, zum BeispielDu bekommst 10 % Rabatt!für den Code PIZZA10. - 2
Gib einen Gutschein ein, den es nicht gibt, etwa ABC, und klicke: Die Seite ändert sich nicht, und die Konsole zeigt den Fehler. Schreibe die Zeilen des Handlers, die auf
pruefeGutschein()warten und den Rabatt anzeigen, intryund zeige incatchdie Meldung des Fehlers inmeldungan. - 3
Zeige, während die Pizzeria den Code prüft,
Wird geprüft…an und deaktivierepruefenButton. Aktiviere ihn infinallywieder, damit er wieder funktioniert, egal ob der Gutschein gültig war oder nicht.