mk-prg-net \ js \ basics \asynchron

Muster der asynchronen Funktionen

Das Muster der asynchronen Funktionen in JavaScript veranschaulicht folgende Grafik:

Verarbeitung asynchroner Funktionen, betrachtet über den Zeitstrahl.
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();

Asynchrone Methoden: Asynchrone Primzahlsuche


Gefundene Primzahlen