Direkt zum Hauptinhalt springen
eLearner.app
Modul 7 · Lektion 1 von 425/32 im Kurs~12 min
Lektionen des Moduls (1/4)

Promises: Was sie sind

Ein Promise ist ein Wert, der das Ergebnis einer Operation darstellt, die in der Zukunft abgeschlossen wird. Es kann sich in einem von drei Zuständen befinden:

  • pending — die Operation läuft noch
  • fulfilled — erfolgreich abgeschlossen, es gibt einen Wert
  • rejected — fehlgeschlagen, es gibt einen Fehler

Sobald es den Zustand pending verlässt, ist es für immer festgelegt (settled).

Ein aufgelöstes Promise erstellen

Die zwei häufigsten Wege (du wirst ein Promise fast nie manuell mit dem Konstruktor erstellen):

JS
const p1 = Promise.resolve(42);
const p2 = Promise.reject(new Error('oops'));

Das Ergebnis lesen: .then / .catch

JS
Promise.resolve(10).then((v) => {
  console.log(v); // 10
});

Promise.reject(new Error('no')).catch((e) => {
  console.log(e.message); // 'no'
});

.then erhält eine Funktion, die mit dem aufgelösten Wert aufgerufen wird. .catch erhält eine Funktion, die im Falle einer Rejection mit dem Fehler aufgerufen wird.

Verkettung

Jedes .then gibt seinerseits ein neues Promise zurück: Du kannst sie verketten, um den Wert Schritt für Schritt zu transformieren.

JS
Promise.resolve(5)
  .then((n) => n * 2)
  .then((n) => n + 1)
  .then((n) => console.log(n)); // 11

Wenn eines der .then-Glieder einen Fehler wirft (oder ein fehlgeschlagenes Promise zurückgibt), springt die Ausführung direkt zum ersten folgenden .catch.

Konstruktor (selten)

JS
const p = new Promise((resolve, reject) => {
  if (Math.random() > 0.5) resolve('ok');
  else reject(new Error('no'));
});

Du wirst ihn nur verwenden, wenn du etwas mit Callbacks in ein Promise umwandeln („promisify“) musst (z. B. alte DOM-APIs oder setTimeout).

Probier es aus

Übung#js.m7.l1.e1
Versuche: 0Wird geladen…

Definiere `promisedVersion(n)`: Gibt für eine übergebene Zahl ein aufgelöstes Promise mit dem Doppelten von n zurück.

Editor wird geladen…
Hinweis anzeigen

return Promise.resolve(n * 2)

Lösung nach 3 Versuchen verfügbar

Wiederholungsübung

Übung#js.m7.l1.e2
Versuche: 0Wird geladen…

Definiere `incrementThree(p)`: Erhält ein Promise, das eine Zahl liefert, und gibt ein Promise mit dieser Zahl + 3 zurück. Verwende eine .then-Kette.

Editor wird geladen…
Hinweis anzeigen

p.then((n) => n + 3)

Lösung nach 3 Versuchen verfügbar