Daten geladen!
Promises
Ein Promise (Versprechen) ist ein Objekt, das das Ergebnis einer asynchronen Aufgabe repräsentiert – zum Beispiel das Laden von Daten oder das Warten auf einen Timer. Statt den Code zu blockieren, sagt dir ein Promise später Bescheid, ob die Aufgabe erfolgreich war oder fehlgeschlagen ist.
Promises sind der Standard-Weg in JavaScript, um mit asynchronem Code umzugehen. Die Grundlagen dazu kennst du bereits aus dem Kapitel Asynchronität (Einführung).
Was ist ein Promise?
Stell dir vor, du bestellst online etwas: Du bekommst eine Bestellbestätigung, musst aber nicht vor der Tür warten, bis das Paket kommt. Du machst weiter – und wirst informiert, sobald es da ist.
Genau so funktioniert ein Promise: Du startest eine Aufgabe und bekommst ein Promise-Objekt zurück. Später reagierst du auf das Ergebnis mit then() (Erfolg) oder catch() (Fehler).
Die drei Zustände
Jedes Promise befindet sich in genau einem dieser Zustände:
| Zustand | Bedeutung |
|---|---|
pending | Ausstehend – die Aufgabe läuft noch |
fulfilled | Erfüllt – die Aufgabe war erfolgreich |
rejected | Abgelehnt – die Aufgabe ist fehlgeschlagen |
Ein Promise kann nur einmal erfüllt oder abgelehnt werden. Danach ändert sich der Zustand nicht mehr.
then() und catch()
Mit then() reagierst du auf ein erfolgreiches Ergebnis. Mit catch() fängst du Fehler ab:
Promise mit then() und catch()
1const promise = new Promise(function(resolve, reject) {
2 setTimeout(function() {
3 resolve("Daten geladen!");
4 }, 1000);
5});
6
7promise
8 .then(function(ergebnis) {
9 console.log(ergebnis);
10 })
11 .catch(function(fehler) {
12 console.error("Fehler:", fehler);
13 });Output
Der Code nach dem Promise läuft sofort weiter – then() wird erst aufgerufen, wenn die Aufgabe fertig ist.
Was passiert bei einem Fehler?
Promise mit reject()
1const promise = new Promise(function(resolve, reject) {
2 const erfolg = false;
3
4 if (erfolg) {
5 resolve("Alles okay!");
6 } else {
7 reject("Etwas ist schiefgelaufen");
8 }
9});
10
11promise
12 .then(function(ergebnis) {
13 console.log(ergebnis);
14 })
15 .catch(function(fehler) {
16 console.log("Fehler:", fehler);
17 });Output
Fehler: Etwas ist schiefgelaufen
Wird ein Promise abgelehnt, springt die Ausführung direkt in catch() – then() wird in diesem Fall übersprungen.
Ein Promise erstellen
Mit new Promise() erstellst du selbst ein Promise. Die Funktion bekommt zwei Parameter: resolve (Erfolg) und reject (Fehler):
Eigenes Promise erstellen
1function datenLaden() {
2 return new Promise(function(resolve, reject) {
3 setTimeout(function() {
4 resolve({ name: "Anna", alter: 25 });
5 }, 1000);
6 });
7}
8
9datenLaden()
10 .then(function(user) {
11 console.log(user.name);
12 console.log(user.alter);
13 });Output
Anna
25
Viele Browser-Funktionen geben bereits ein Promise zurück – zum Beispiel fetch() beim Laden von Daten aus dem Internet. Dazu mehr im Kapitel fetch und APIs.
Kurz gesagt: Ein Promise steht für eine asynchrone Aufgabe. Mit then() verarbeitest du das Ergebnis, mit catch() behandelst du Fehler. Im nächsten Kapitel lernst du mit async/await eine noch lesbarere Schreibweise kennen.
Im nächsten Kapitel lernst du: async await