Promises
Ziele
- Du weisst, was Promises sind und wozu sie verwendet werden.
- Du kannst, Promises korrekt anwenden in Funktionen.
Promises
Ein Promise repräsentiert einen Wert (oder ein Versprechen), der möglicherweise in der Zukunft verfügbar sein wird.
Promises werden oft verwendet, um asynchrone Operationen wie das Laden von Daten von einem Server oder das Ausführen eines HTTP-Requests zu verwalten. Ein Promise kann sich in einem von drei Zuständen befinden:
- Pending (ausstehend): Der Promise ist noch nicht erfüllt (
resolved
) oder abgelehnt (rejected
) worden. - Fulfilled (erfüllt): Die asynchrone Operation wurde erfolgreich abgeschlossen (
resolved
) und der Promise enthält den zurückgegebenen Wert. - Rejected (abgelehnt): Die asynchrone Operation ist fehlgeschlagen und der Promise enthält den Fehler.
Ein Promise kann mit der Funktion new Promise()
erstellt werden. Diese Funktion nimmt eine Funktion als Argument, die zwei Parameter enthält: resolve
und reject
. resolve
wird aufgerufen, wenn die Operation erfolgreich abgeschlossen wurde, und reject
, wenn ein Fehler aufgetreten ist.
|
|
Promises bieten zwei Methoden an, um mit dem Ergebnis oder dem Fehler der asynchronen Operation umzugehen:
then()
catch()
Die then()
Methode wird verwendet, um eine Funktion zu registrieren, die ausgeführt wird, wenn das Promise erfolgreich erfüllt wird. Diese Funktion erhält das Ergebnis des erfüllten Promise als Parameter:
|
|
then()
kann jedoch mehrmals hintereinander verwendet werden, um eine Kette von Funktionen zu erstellen, die nacheinander ausgeführt werden, wenn das Promise erfüllt wird.
Durch die Verwendung von then()
in Kombination mit return
in jeder Funktion kann eine Kette von Funktionen erstellt werden, die nacheinander ausgeführt werden, wobei jedes Ergebnis das Argument für die nächste Funktion in der Kette ist.
|
|
Die catch()
Methode wird verwendet, um eine Funktion zu registrieren, die ausgeführt wird, wenn das Promise fehlschlägt. Diese Funktion erhält den Fehler als Parameter.
|
|
then()
und catch()
werden fast immer zusammen verwendet:
|
|
Promises als Function
Promises in Funktionen zu packen ist eine gängige Praxis in JavaScript, um asynchrone Operationen und Callbacks zu verwalten. Indem man Promises in Funktionen einbettet, kann man sicherstellen, dass die asynchronen Operationen sequentiell ausgeführt werden und man eine klare Struktur im Code hat.
Dazu muss man das gesamte Promise in der function returned:
|
|
Nun kann man diese Funktion innerhalb von anderen Funktionen verwenden. Wichtig ist das diese mit await
verwendet werden, um auf das Ergebnis des Promises zu warten, bevor der Rest der Funktion fortgesetzt wird. So kann man sicher gehen das man das Resultat aus dem Promise zur Verfügung hat und es danach in der Funktion verwenden kann. Wenn man jedoch ein await
in einer Funktion verwendet muss die gesamte Funktion asynchron sein, dazu muss man vor die Funktion das Schlüsselwort async
schreiben.
|
|
Wenn man es nicht verwenden würde, würde der Code in der Funktion weiterfahren ohne das er evtl. das Resultat aus der Promise hat (das Promise hat noch den Zustand Pending).
|
|