← React / TypeScript

React / TypeScript · 09 / 18

Promises, async/await und Fehler

Du wartest auf spätere Ergebnisse und behandelst fehlgeschlagene Aufgaben.

  • Klein
  • Grundlagen
  • 15 min

Voraussetzungen: TypeScript-Typen und Module

Eine Promise beschreibt eine Aufgabe, die später erfolgreich sein oder fehlschlagen kann. Ein Aufruf wie fetch liefert zunächst eine Promise statt direkt die Daten. async macht eine Funktion asynchron. await wartet innerhalb dieser Funktion auf ein Ergebnis. Das ist noch keine Garantie für parallele CPU-Verarbeitung.

Beispieldateien

01Eine verzögerte Aufgabe starten

setTimeout plant eine spätere Ausführung. Die Promise löst sich danach mit dem Namen auf. Unser Beispiel arbeitet ohne Netzwerk, damit du den Ablauf unabhängig von einem Server beobachten kannst.

async.mjs · javascriptDatei öffnen
function loadName() {
  return new Promise((resolve) => {
    setTimeout(() => resolve('House'), 100);
  });
}
try {
  const name = await loadName();
  console.log(name);
} catch (error) {
  console.error('Loading failed:', error.message);
}

Starten / prüfen

node async.mjs

02Das Ergebnis verwenden

await loadName() liefert House nach der Verzögerung. Ohne await hättest du die Promise selbst. Während einer echten Netzwerkaufgabe kann die Oberfläche weiter reagieren. Eine später fertig werdende alte Anfrage darf aber nicht automatisch eine neuere Anzeige überschreiben.

03Den Fehlerweg ausprobieren

Ersetze resolve("House") durch reject(new Error("Unavailable")) und ergänze reject als zweiten Parameter des Promise-Callbacks. catch empfängt den Fehler. finally wäre ein Ort für Aufräumen, das bei Erfolg und Fehler nötig ist.

Erwartetes Ergebnis

Nach etwa 100 Millisekunden: House

Deine Übung

Starte zwei unabhängige loadName-Aufrufe mit Promise.all. Wie sieht das Ergebnis aus?

Lösung mit Erklärung anzeigen

const names = await Promise.all([loadName(), loadName()]) ergibt ["House", "House"]. Die Reihenfolge folgt den Eingaben. Wenn eine Aufgabe fehlschlägt, lehnt Promise.all ab. Die andere Aufgabe wird dadurch nicht automatisch abgebrochen.

Projektbezug und Quellen

Das Beispiel ist zum Lernen vereinfacht. Die verlinkte Codeversion zeigt die Anwendung im Projekt und die dortigen Prüfungen.