node.js Nested Callbacks

Das schöne an node.js ist ja das man es sich (fast immer) heraussuchen kann was syncron (seriell) oder asyncron (parallel) ausgeführt werden soll.

Allerdings eben nur fast .. bei Requests oder simulierten http Client Requests durch node läuft das Programm einfach weiter und wartet eben nicht die gesamte Antwort der Anfrage ab.

Doof ist das generell wenn das restliche Programm mehr oder weniger auf den Daten des Requests basiert. Das selbe Problem dürfte man bei AJAX Requests im Client auch haben.

Man will also warten bis alle Daten des Requests “da” sind bevor das Programm weiter machen soll.

Das geht auch .. allerdings ist man gezwungen die nachfolgenden Funktionen nach “ response.on(‘end’)” aufzurufen .. und zwar verschachtelt in der Request Funktion.

Sich einfach einen rückgabe Wert liefern zu lassen funktioniert leider nicht .. da node.js ja die Programmausführung solange nicht anhält und die Rückgabe dann in der Regel “undefined” ist.

Im blödesten Fall hüpft man also von Request zu Request Funktion und baut sich schön doof verschachtelten Code zusammen .. die Noder nennen das Boomerang Code.

Wenn man weiß wieviele Elemente der Request liefert kann man sich ja ggf. noch mit einer Zähler Schleife behelfen .. wenn man aber nicht weiß wie groß die Response ist kann man entweder verschachteln oder man verwendet Node.js Erweiterungen für Flow Control.

Ich habe diese Module noch nicht getestet .. aber das werde ich wohl machen müssen wenn ich meinen Code irgendwann nochmal entziffern will:

Eine weitere Möglichkeit die asynchronen “Antworten” abzufangen ist diese zu emitten und einen Listener auf die Antwort zu setzen .. aber da bin ich auch gerade noch am lernen .. ich werd demnächst was dazu schreiben.

Leave a Reply

Your email address will not be published. Required fields are marked *