handshake-simplePromises

Ein Promise ist ein Objekt, das als Platzhalter für das zukünftige Ergebnis einer asynchronen Operation verwendet wird. Ein Beipsiel für ein zukünftiges Ergebnis bspw. die Response von einem AJAX Call.

Lifecycle

Ein Promise geht durch mehrere Status, weshalb wir einen Lifecycle durchlaufen.

Drawing
Promise Lifecylcle
circle-info

In unserem Code können wir diese verschiedenen States verarbeiten!

Consuming Promises

Wir können Promises über die then()-Methode konsumieren und so die verschiedenen States behandeln.

circle-exclamation

Chaining Promises

Damit wir die Callback Hell verhindern können wir Promises verketten. Das machen wir indem wir den nächsten Promise zurückgeben und danach wieder mit der Methode then() behandeln.

Rejected Promises

Wir können mit der catch()-Methode rejected Promises abfangen.

Throwing errors manually

Wenn der User bspw. Informationen über ein Land will das gar nicht existiert, lautet die Fehlermeldung:

Cannot read property 'flag' of undefined

Das bringt dem Nutzer nicht gerade viel. Wenn wir aber einen manuellen Fehler werfen, können wir so die Message darin selbst bestimmen.

Wenn wir manuell einen Fehler werfen, dann wird der Promise sofort rejected und wird dann schlussendlich im catch() abgefangen und behandlelt.

async/await

Mit async/await bietet uns JavaScript eine einfachere Möglichkeit mir Promises zu arbeiten.

try...catch

Mit async/await können wir nicht mehr die catch()-Methode nutzen. Deshalb müssen wir hier mit try...catch-Statements arbeiten.

return-Werte

async-Funktionen können natürlich auch return-Werte haben. Diese sind aber nur über einen Trick zu erhalten.

Wir nutzen also IIFE, um await ausführen zu können. So können wir direkt auf die Daten zugreifen.

circle-info

Den try/catch-Teil brauchen wir nur, wenn wir in der asynchronen Funktion den Error wieder werfen:

circle-check

Building Promises

Über den Promise-Constructor können wir einen neuen Promise erstellen. Die Callback-Funktion darin nimmt zwei Funktionen an:

  • resolve: Markiert den Promise als fullfilled

  • reject: Markiert den Promise als rejected

Diesen Promise können wir dann ganz normal über die then()-Methode konsumieren.

Promisifying

Das Bauen eigener Promises ist vor allem dann nützlich, wenn wir mit Callbacks arbeiten, z.B. bei der setTimeout()-Methode oder mit der Geolocation API. So können wir nämlich der Callback Hell selbst entkommen.

Promises parallel ausführen

Wenn wir einfach nur sturr mehrere awaits hintereinander ausführen, die aber nicht voneinander abhängig sind, dann verlieren wir kostbare Zeit. Um dies zu umgehen, können wir Promise.all() benutzen. Diese Methode führt alle Calls gleichzeitig aus.

Last updated