Promise ·
then() / catch() ·
async / await ·
Promise.all() ·
Promise.race() ·
Fehlerbehandlung
Asynchrone Programmierung ist in JavaScript allgegenwärtig – für API-Aufrufe, Dateioperationen, Timer und mehr. Promises und async/await sind der moderne Standard für sauberen, lesbaren Code.
Promises sind Objekte, die das Ergebnis einer asynchronen Operation repräsentieren – entweder erfüllt (resolved) oder abgelehnt (rejected). Sie haben drei Zustände: pending, fulfilled, rejected.
| Zustand | Beschreibung |
|---|---|
| pending | Wird noch ausgeführt (initial) |
| fulfilled | Erfolgreich abgeschlossen (resolve aufgerufen) |
| rejected | Fehlgeschlagen (reject aufgerufen oder Fehler) |
then()- und catch()-Methoden registrieren nur die Callbacks für den Fall, dass das Promise erfüllt oder abgelehnt wird.
then() wird aufgerufen, wenn das Promise erfüllt wird. catch() fängt Fehler ab. finally() wird immer ausgeführt – unabhängig von Erfolg oder Fehler.
| Methode | Beschreibung |
|---|---|
| then(callback) | Wird bei Erfolg ausgeführt (kann Promise zurückgeben) |
| catch(callback) | Wird bei Fehler ausgeführt |
| finally(callback) | Wird immer ausgeführt (keine Argumente) |
| then().then() | Verkettung (jedes then kann ein Promise zurückgeben) |
catch() am Ende der Kette fängt alle Fehler aus vorhergehenden then()-Callbacks ab. Das verhindert unbehandelte Promise-Rejections.
async/await ist syntaktischer Zucker für Promises. async deklariert eine asynchrone Funktion, die immer ein Promise zurückgibt. await pausiert die Ausführung, bis das Promise erfüllt ist.
| Regel | Beschreibung |
|---|---|
| async | Vor einer Funktion – macht sie asynchron |
| await | Nur innerhalb von async-Funktionen erlaubt |
| try/catch | Fehlerbehandlung mit try/catch (oder .catch()) |
| Rückgabewert | async-Funktionen geben immer ein Promise zurück |
try/catch mit await für eine klare Fehlerbehandlung – das ersetzt .catch() und macht den Code lesbarer.
Fehlerbehandlung ist entscheidend für robuste asynchrone Anwendungen. Mit try/catch können Sie Fehler abfangen und angemessen reagieren. throw löst benutzerdefinierte Fehler aus.
unhandledrejection-Events. Verwenden Sie immer .catch() oder try/catch mit await.
Promise.all() wartet auf alle Promises – wenn eines fehlschlägt, schlägt das gesamte Promise fehl. Promise.race() gibt das Ergebnis des ersten erfüllten oder abgelehnten Promises zurück.
| Methode | Beschreibung | Verhalten bei Fehler |
|---|---|---|
| Promise.all([p1, p2]) | Wartet auf alle Promises (parallel) | Schlägt sofort fehl bei einem Fehler |
| Promise.allSettled([p1, p2]) | Wartet auf alle Promises (parallel) | Wartet immer auf alle (kein sofortiger Abbruch) |
| Promise.race([p1, p2]) | Gibt das schnellste Promise zurück | Gibt das schnellste (erfüllt oder abgelehnt) |
| Promise.any([p1, p2]) | Gibt das erste erfüllte Promise | Ignoriert Fehler bis alle fehlschlagen |
Promise.allSettled() ist ideal, wenn Sie alle Ergebnisse benötigen – auch wenn einzelne Promises fehlschlagen. Promise.race() eignet sich für Timeout-Implementierungen.
Best Practices für asynchrone Programmierung – von Performance-Optimierung bis zu sauberer Fehlerbehandlung.
try/catch mit await oder .catch().
Promise
then()
async
await
Promise.all
catch
await fetch('/api') ·
Promise.all([p1, p2]) ·
try { await op() } catch (err) { }