Aufgabe 05 - Promise-Werkstatt
Aufgabe 05 - Promise-Werkstatt
Abschnitt betitelt „Aufgabe 05 - Promise-Werkstatt“Worum geht es?
Abschnitt betitelt „Worum geht es?“Sie bauen mit Promises und async/await eine simulierte Pizzeria-Küche: asynchrone Abläufe mit Abhängigkeiten, Wartezeiten und Fehlerfällen (siehe Kapitel Nebenläufigkeit I). Die Simulation ist bewusst greifbar gewählt; dieselben Muster tragen später jeden API-Aufruf.
Was Sie dafür brauchen
Abschnitt betitelt „Was Sie dafür brauchen“- Kapitel Nebenläufigkeit I vollständig; Aufgabe 04 (Event-Loop-Modell).
- Node.js mit TypeScript (
tsx), VS Code.
Welche Kompetenzen Sie erwerben und zeigen
Abschnitt betitelt „Welche Kompetenzen Sie erwerben und zeigen“- Sie erzeugen eigene Promises mit
resolve/rejectund typisieren sie mitPromise<T>. - Sie koordinieren abhängige Abläufe mit
async/awaitund behandeln Fehler mittry/catch. - Sie vergleichen
then-Ketten undasync/awaitbegründet.
Pädagogische Einordnung
Abschnitt betitelt „Pädagogische Einordnung“- Reproduktion: die Grundbausteine (
sleep, einfache async-Funktionen) nach Vorlage erstellen (Teil A). - Reorganisation und Transfer: die Bausteine zu einem fehlerbehandelten Ablauf kombinieren (Teile B und C).
- Reflexion, Problemlösung und Urteilsbildung: Fehlverhalten vorhersagen, nachweisen und mit dem Ausführungsmodell erklären (Teil D).
Arbeitsaufträge
Abschnitt betitelt „Arbeitsaufträge“Die Übung ist auf etwa zwei Stunden ausgelegt. Teil D ist der Expertenteil.
Teil A - Die Bausteine
Abschnitt betitelt „Teil A - Die Bausteine“sleep(milliseconds): Promise<void>: löst nach der Wartezeit auf (mitsetTimeoutgebaut; der Klassiker aus dem Kapitel).- Drei Küchenschritte als typisierte async-Funktionen:
makeDough()(2 s),addToppings(dough, topping)(1 s),bake(pizza)(3 s). Jede loggt Start und Ende mit Zeitstempel und reicht ein beschreibendes Objekt weiter ({ step: "dough", topping?: ... }). bakeschlägt in 25 Prozent der Fälle fehl:throw new Error("burned!")(bzw.reject). Der Zufall kommt ausMath.random().
Teil B - Der Ablauf
Abschnitt betitelt „Teil B - Der Ablauf“orderPizza(topping): führt die drei Schritte mitawaitin der richtigen Reihenfolge aus und misst die Gesamtdauer mitperformance.now().- Verbrannt-Behandlung: Beim ersten Fehlschlag wird genau einmal neu gebacken; scheitert auch das, wird der Fehler weitergereicht (nicht verschluckt).
- Der Aufrufer (ein kleines Hauptprogramm) fängt den Fehler und meldet kundenfreundlich; ein
finallydruckt in jedem Fall die Dauer.
Teil C - Zwei Schreibweisen
Abschnitt betitelt „Teil C - Zwei Schreibweisen“- Schreiben Sie dieselbe Kette ein zweites Mal als
then-Verkettung mit einemcatcham Ende (FunktionsnameorderPizzaThen). - Vergleichen Sie beide Fassungen in zwei bis drei Sätzen: Lesbarkeit, Fehlerbehandlung, wo würden Sie welche einsetzen?
Teil D - Expertenteil: Das vergessene await
Abschnitt betitelt „Teil D - Expertenteil: Das vergessene await“- Vorhersage zuerst, schriftlich: Was passiert, wenn in
orderPizzadasawaitvorbake(...)fehlt? Was wird geloggt, was liefert die Funktion, wann erscheint ein eventueller Verbrannt-Fehler? - Probieren Sie es aus und vergleichen Sie mit Ihrer Vorhersage. Erklären Sie das beobachtete Verhalten mit dem Event-Loop-Modell aus Aufgabe 04 (wo liegt das Promise, wann läuft sein Code?).
- Zeigen Sie, wie TypeScript hilft: Welche Compile-Meldung entsteht, wenn der Rückgabewert von
bakeohneawaitweiterverarbeitet wird? - Bauen Sie abschließend
orderPizzaso um, dass zwei Beläge parallel vorbereitet werden (zweimaladdToppingsgleichzeitig, gemeinsames Warten), und messen Sie den Zeitgewinn. Hinweis: Das Koordinationswerkzeug dafür kennt das Kapitel; die Vertiefung folgt in Aufgabe 07.
Wissenscheck
Abschnitt betitelt „Wissenscheck“- In welchen drei Zuständen kann ein Promise sein, und wie oft wechselt es?
- Was liefert eine
async-Funktion immer, auch beireturn 42? - Wohin springt die Ausführung, wenn ein
awaitetes Promise scheitert? - Warum pausiert
awaitnur die Funktion und nicht das Programm? - Woran erkennen Sie im Log, dass zwei Schritte parallel statt nacheinander liefen?
pizzeria.ts mit beiden Varianten, den Messwerten und den schriftlichen Antworten (Vorhersage und Erklärung aus Teil D) als Kommentar.