InhaltsverzeichnisKlicke auf den Link, um zur gewünschten Stelle zu navigieren
Dieser Inhalt wurde automatisch aus dem Ukrainischen übersetzt.
```html
```
Promise — ist ein Objekt, das das Ergebnis einer asynchronen Operation darstellt. Sie ermöglichen es, mit verzögerten Ergebnissen zu arbeiten, ohne verschachtelte Rückruffunktionen, was den Code lesbarer macht. Früher habe ich bereits einen kleinen Beitrag darüber geschrieben, was ein Promise ist. Aber jetzt betrachten wir die Struktur und einige Methoden.
Wie die Struktur eines Promise aussieht
Promise wird mit dem Konstruktor new Promise() erstellt, dem eine Funktion mit zwei Argumenten übergeben wird: resolve und reject. Genau diese Struktur sollte man sich merken. Lassen Sie uns ein Beispiel betrachten:
const promise = new Promise((resolve, reject) => {
const success = Math.random() > 0.5;
setTimeout(() => {
if (success) {
resolve("Operation erfolgreich ausgeführt");
} else {
reject("Es ist ein Fehler aufgetreten");
}
}, 1000);
});
Dieser Code erstellt ein Promise, das nach einer Sekunde (Timeout 1000) entweder mit der Zeichenfolge "Operation erfolgreich ausgeführt" aufgelöst (resolve) oder mit einer Fehlermeldung abgelehnt (reject) wird. Das heißt, wir haben eine Antwortemulation success erstellt, eine Sekunde gewartet und ein Ergebnis erhalten, das von unserem zufälligen Wert in success abhing.
Arbeiten mit Promise
Promise hat die Methoden .then(), .catch() und .finally() zur Verarbeitung des Ergebnisses.
promise
.then(result => {
console.log("Erfolg:", result);
})
.catch(error => {
console.log("Fehler:", error);
})
.finally(() => {
console.log("Operation abgeschlossen");
});
Hier erhält .then() den Wert von resolve, .catch() verarbeitet den Fehler von reject, und .finally() wird immer ausgeführt, unabhängig vom Ergebnis. Diese Methoden sollte man sich ebenfalls merken.
Promise-Ketten
Die Methode .then() gibt ein neues Promise zurück, was eine sequenzielle (verkettete) Ausführung ermöglicht.
new Promise(resolve => resolve(10))
.then(num => num * 2)
.then(num => num + 5)
.then(result => console.log("Ergebnis:", result));
Hier wird der Ausgangswert 10 mit 2 multipliziert, 5 hinzugefügt, und das Ergebnis ist 25.
Promise.all, Promise.race und Promise.any
Die Methode Promise.all() wartet auf die Ausführung aller übergebenen Promises.
Promise.all([
new Promise(resolve => setTimeout(() => resolve("Erstes"), 1000)),
new Promise(resolve => setTimeout(() => resolve("Zweites"), 2000))
]).then(results => console.log("Alle ausgeführt:", results));
Und Promise.race() gibt das erste ausgeführte Promise zurück. Diese Methode lässt sich leicht mit dem Namen race merken - wer zuerst kommt, mahlt zuerst.
Promise.race([
new Promise(resolve => setTimeout(() => resolve("Erstes"), 1000)),
new Promise(resolve => setTimeout(() => resolve("Zweites"), 500))
]).then(result => console.log("Erstes ausgeführt:", result));
Promise.any() ist eine Methode, die ein Array von Promises akzeptiert und das erste erfolgreich ausgeführte Promise zurückgibt. Wenn alle Promises abgelehnt werden, gibt es einen Fehler vom Typ AggregateError zurück.
const p1 = new Promise((_, reject) => setTimeout(() => reject("Fehler 1"), 1000));
const p2 = new Promise(resolve => setTimeout(() => resolve("Erfolg 2"), 2000));
const p3 = new Promise(resolve => setTimeout(() => resolve("Erfolg 3"), 3000));
Promise.any([p1, p2, p3])
.then(result => console.log("Erstes erfolgreiches Ergebnis:", result))
.catch(error => console.log("Alle Promises abgelehnt:", error));
Was im Beispiel passiert:
- p1 wird nach 1 Sekunde abgelehnt.
- p2 wird nach 2 Sekunden erfolgreich ausgeführt.
- Promise.any() gibt p2 zurück, da es das erste erfolgreiche war.
- Wenn alle Promises abgelehnt werden, wird ein AggregateError zurückgegeben, der alle Fehler enthält.
Diese Methode ist nützlich, wenn man das erste erfolgreiche Ergebnis erhalten möchte, während man die fehlgeschlagenen ignoriert.
Dieser Beitrag hat noch keine Ergänzungen vom Autor.