Das Muster der asynchronen Funktionen in JavaScript veranschaulicht folgende Grafik:
Asynchrone Funktionen vermeiden prinzipiell ein Blokieren des Systems bei Ein/Ausgaben.
So kann eine arbeitsaufwendige Primzahlsuche auf einem großen Abschnitt des Zahlenstrahls in kleine Teilaufgaben zerlegt werden.
Jede Teilaufgabe wird als Event in die Eventqueue gestellt, und von der JavaScript- nach Verarbeitung vorausgegangener Events
bearbeitet. So wird ein "einfrieren" des Browseroberfläche vermieden.
Implementieren mittels Promises
Q.js ist eine Bibliothek, die das Implementieren von asynchronen Methoden mittels
Promises vereinfacht.
Werden viele asynchrone Methoden hintereinandergeschaltet, dann rücken die Folgefunktionen immer weiter nach rechts, es ensteht ein sehr unschönes
Layout, genannt Pyramid of doom. Promises bieten eine Syntax, die das vermeidet.
Aufruf einer asynchronen Methode mitteles Promise:
asynMethodReturnsPromise(...).then(callbackIfDone(OneParam)[, callbackIfFails(OneParam)[, callbackIfProgessInfo(OneParam)]]).
Gibt der callbackIfDone wiederum einen Promise zurück, dann kann dessen then einfach hinter den ersten then notiert werden:
asynMethodReturnsPromise(...).then(callbackIfDone(OneParam)[, callbackIfFails(OneParam)[, callbackIfProgessInfo(OneParam)]]).then(CallbackIfSecondAsyncDone(OneParam)).
Diese Aufrufschema wird auch promise chainning genannt.
Für Wird eine einzelne async- Methode aufgerufen, dann können callbackIfFails und callbackIfProgressInfo ebenfalls in die
Promise- Chain eingefügt werden, anstatt sie als 2-ten und 3-ten Parameter mitzugeben:
asynMethodReturnsPromise(...).then(callbackIfDoneReturnsPromise).progress(callbackIfProgessInfo).catch(callbackIfFails);
Das promise- chainning kann mit einer done() Methode beendet werden. Diese feuert eine Ausnahme, falls in der promise- chain eine
unbehandelte Ausnahme auftrat.
asynMethodReturnsPromise(...).then(callbackIfDoneReturnsPromise).progress(callbackIfProgessInfo).catch(callbackIfFails).done();