#short

Werbung* - Unterstütze die Seite gerne durch einen Kauf einem Partnershop!


Lernen macht hungrig oder? Dann koch dir doch was!



Ist Elektronik und Arduino dein Ding?

informatiker.lernen();

Letzte Änderung: 21-10-2026

Webentwicklung: Grundlagen JavaScript Promise 

In diesem Tutorial geht es darum, asynchrone Ergebnisse mit Promises zu verarbeiten, Abläufe zu verketten und Fehler gezielt abzufangen.

Einfügen

1 Was ist ein Promise

Eine Netzwerkantwort oder ein Timer-Ergebnis steht oft erst später bereit. Der übrige Code läuft währenddessen weiter. Ein Promise ist ein Objekt, das das spätere Ergebnis eines Vorgangs oder dessen Fehlschlag beschreibt. Es werden Funktionen registriert, die darauf reagieren, sobald das Ergebnis feststeht.

Ein Promise ist vergleichbar mit einem Abholschein: Man besitzt zunächst den Schein, nicht die bestellte Ware. Übertragen auf JavaScript bedeutet das: Die Variable mit dem Promise enthält noch nicht unmittelbar die später gelieferten Daten.

Die drei Zustände
Zustand Bedeutung Reaktion
pending noch offen Das Ergebnis oder der Fehler steht noch nicht fest.
fulfilled erfolgreich erfüllt Der Erfolgs-Handler in .then(...) erhält den Wert.
rejected abgelehnt Ein Fehler-Handler, etwa .catch(...), erhält den Grund.

Ein Promise kann nur einmal endgültig fulfilled oder rejected werden. Dieser Abschluss heißt settled. Ein abgeschlossenes Promise wechselt seinen Zustand nicht mehr. Es lässt sich auch später noch mit Handlern verarbeiten.

Erste Schritte mit Promise

Promise.resolve(...) erzeugt hier ein bereits erfülltes Promise mit einem Text. Der Teil ".then(...)" registriert die Funktion für den Erfolgsfall. Der Parameter text erhält den gelieferten Wert; der Name ist frei wählbar. Der Handler wird nicht sofort im laufenden Code aufgerufen.

Mit new Promise(...) lässt sich ein Promise neu erzeugen. Der Konstruktor ruft die übergebene Funktion sofort auf. Diese Funktion heißt Executor und erhält zwei Funktionen:

  • resolve zum Auflösen
  • reject zum Ablehnen

Die Namen sind Konvention, JavaScript übergibt die Funktionen nach Position.


Ein Promise verwenden

Um das Ergebnis eines Promises zu verarbeiten, nutzt man Method-Chaining:

  • .then(): Wird ausgeführt, wenn das Promise erfolgreich erfüllt wurde (resolve).
  • .catch(): Wird ausgeführt, wenn ein Fehler aufgetreten ist (reject).
  • .finally(): Wird immer ausgeführt, unabhängig davon, ob es erfolgreich war oder nicht (z. B. zum Aufräumen).

Da Promises meist für asynchrone Aufgaben verwendet werden, ist hier ein praktisches Beispiel. Hier simuliert ein Timer eine Datenabfrage.

Der genaue Ablauf ist folgend:

  1. "loadProfile(true)" wird aufgerufen. Der Executor startet sofort den Timer. return gibt das neue Promise an den Aufrufer zurück; der spätere Profilwert ist zu diesem Zeitpunkt noch nicht verfügbar.
  2. ".then(...)" und ".catch(...)" registrieren die Handler. Sie warten nicht blockierend. Der übrige Code kann weiterlaufen, während das Promise pending bleibt.
  3. Nach frühestens 500 Millisekunden läuft der Timer-Callback. Bei true löst "resolve(...)" das Promise hier mit einem gewöhnlichen Objekt auf. Anschließend erhält der Erfolgs-Handler dieses Objekt.
  4. Bei false lehnt reject(...) das Promise mit einem Error-Objekt ab. Der Erfolgs-Handler wird übersprungen und der Fehler erreicht .catch(...). fehler.message enthält die Fehlermeldung.

Wichtig: resolve(...) und reject(...) beenden den Executor nicht wie return. Nachfolgender Code kann noch laufen. Wird resolve(...) ein anderes Promise übergeben, übernimmt das äußere Promise dessen späteren Ausgang; resolve bedeutet dann nicht sofort fulfilled.

Einfügen

2 Ergebnisse durch eine Kette weitergeben

Jeder then-Aufruf liefert ein neues Promise

Oft besteht ein asynchroner Ablauf aus mehreren Schritten, die nacheinander ausgeführt werden müssen. Jeder Schritt hängt vom Ergebnis des vorherigen ab. Jedes .then() gibt automatisch ein neues Promise zurück.

Durch das Chaining (Verketten) von .then()-Aufrufen können diese Schritte sauber hintereinandergereiht werden. Dies vermeidet die berüchtigte „Callback Hell“ (tief verschachtelte Funktionen).

Simulation eines Praxisbeispiels: Schritt-für-Schritt Verarbeitung

Stellen wir uns vor, wir möchten Daten von einem Server laden, diese verarbeiten (z. B. in JSON umwandeln oder formatieren) und danach anzeigen:

Die Verkettung hat wichtige Vorteile

Flache Struktur: Statt Funktionen ineinander zu verschachteln, liest sich der Code wie eine klare Liste von Anweisungen von oben nach unten.

Zentrales Error Handling: Ein einziges .catch() am Ende der Kette reicht aus, um Fehler abzufangen, die in irgendeinem der vorherigen .then()-Blöcke auftreten. Wenn ein Fehler geworfen wird, springt JavaScript direkt zum nächsten .catch() und überspringt alle dazugehörigen .then()-Blöcke.

Einfügen

3 Praxisbeispiel: Die fetch() - Funktion

Will man Daten von einem Server abrufen, kann man in JavaScript gut fetch() nutzen. Da eine Internetverbindung Zeit braucht, liefert fetch() nicht sofort die Daten, sondern sofort ein Promise.

Warum nutzen moderne JS-Funktionen so oft Promises?

An diesem fetch()-Beispiel sieht man wunderbar, warum sich Promises in JavaScript als Standard durchgesetzt haben.

Man muss Promises nicht immer selbst mit new Promise() schreiben. Moderne Browser-Funktionen (wie fetch(), Datenbank-Treiber, Datei-APIs etc.) geben oft ein Promise zurück.

Promises sind eine elegante Möglichkeit verschiedene asynchrone Schritte wie an einer Perlenkette hintereinander aufzureihen.

Einfügen

4 Praxisbeispiel: Ein Bild mit fetch() laden

Will man ein Bild mit fetch() laden, liefert die Antwort (response) kein JSON, sondern einen sogenannten Blob (Binary Large Object). Da das Lesen dieser Binärdaten ebenfalls Zeit kostet, gibt auch response.blob() wieder ein Promise zurück.

Das Beispiel zeigt die Stärke von Promises gut auf:

Zunächst wird auf den Server gewartet. Anschließen darauf, dass die Bilddaten im Arbeitsspeicher als Binärdatei bereitstehen. Dank dem .then() - Chaining entsteht eine saubere Kette: Daten holen > in Binärdaten umwandeln > Bild anzeigen.

Die Fehlerbehandlung erfolgt übersichtlich zentral: Egal, ob die Internetverbindung abbricht oder die Bild-URL ungültig ist (response.ok fehlschlägt) – das .catch() am Ende fängt jeden Fehler im gesamten Ablauf zuverlässig ab.

Einfügen

5 Die zwei Schlüsselwörter: async / await

Im Grunde sind async und await nur eine „Schönheitsreparatur“ (Syntactic Sugar) für Promises. Es sorgt dafür, dass asynchroner Code genau so aussieht und sich liest wie ganz normaler, sequenzieller Code (von oben nach unten).

Das Schlüsselwort async steht vor einer Funktionsdefinition und sagt damit, dass diese Funktion asynchron arbeitet und immer ein Promise zurückgibt.

Das Schlüsselwort await kann nur innerhalb von async-Funktionen genutzt werden. Es wird hier signalisiert, das gewartet werden muss, bis das Promise fertig ist( resolve oder reject ), bevor es in der nächsten Zeile weitergeht.

Das Bild-Laden-Beispiel mit async / await

Der Code liest sich wie eine normale Schritt-für-Schritt-Anleitung. Die Fehlerbehandlung erfolgt mit try-catch, das man aus fast jeder Programmiersprache kennt.

Einfügen

Fazit: Warum sich Promises lohnen

Nahezu alle modernen Browser-APIs (wie fetch(), der Zugriff auf Kameras/Mikrofone, Service Worker oder Datenbanken) sowie Node.js-Bibliotheken basieren heute auf Promises.

Promises beenden die unübersichtliche Verschachtelung alter Callback-Funktionen („Callback Hell“) und machen komplexe, asynchrone Abläufe wieder von oben nach unten lesbar.

Fehler in mehrstufigen asynchronen Prozessen müssen nicht an jeder einzelnen Stelle separat abgefangen werden – ein zentrales .catch() reicht aus.

Die modernste und eleganteste Form, asynchronen Code in JavaScript zu schreiben (async / await), ist lediglich eine optische Verschönerung (Syntactic Sugar) von Promises. Wer Promises versteht, hat async / await automatisch verstanden.

Einfügen


Unterstütze informatiker-lernen.de gerne durch einen Kauf auf einer Partner-Seite!

Werbung*


Ist Elektronik und Arduino dein Ding?



Lernen macht hungrig oder? Dann koch dir doch was mit Hello Fresh!



Interesse an Smart Home, aber günstig? Dann los, ELV hat da was!

Bausätze 300x250

Dein Feedback ist uns wichtig

Hat dir dieser Inhalt gefallen? Hast Du Kritik oder Verbesserungsvorschläge? Hast Du inhaltliche Fehler entdeckt?

Schreib uns gerne dein Anliegen an info@informatiker-lernen.de