Ist es in Ordnung, Exporte in einem node.js-Modul asynchron zu initialisieren?

8

Da der MongoDB-Datenbankzugriff und die Initialisierung auf Node.js asynchron sind, möchte ich ein Modul pro Sammlung definieren, das nach der Db-Initialisierung umbrochene db-Aufrufe exportiert.

Ein solches "Cars.model.js" Modul sieht so aus:

%Vor%

, damit andere Module ausgeführt werden können:

%Vor%

Es ist mir passiert, dass getCars nicht definiert war, weil der Datenbankzugriff zum Zeitpunkt der Ausführung meines zweiten Moduls noch nicht initialisiert war.

Wie gehen Sie mit der Erstellung solcher asynchroner db-Modelle um?

    
Adrien Joly 21.06.2011, 12:34
quelle

3 Antworten

10

Sie können nicht in exports schreiben, nachdem Sie die Datei verlassen haben. Sie müssen blockieren. Um das Blockieren zu vermeiden, würde ich das laue Laden von Ressourcen verwenden.

%Vor%

Verwenden Sie Ereignisemitter, um das verzögerte Laden zu emulieren. Möglicherweise möchten Sie auf eine LazyLoadedCollection -Klasse / -Objekt verallgemeinern, um den Code sauberer / mehr DRY zu machen.

    
Raynos 21.06.2011 14:05
quelle
2

Ich bin ein Newbe, also sei nicht böse auf mich ...

Ich verwende Versprechungen dazu:

%Vor%

So können Sie Ihre Autos so bekommen:

%Vor%

Es ist eine schlechte Idee, lass es mich wissen, weil es genau das ist, was ich gerade tue.

    
pykiss 17.07.2014 12:44
quelle
0

Ich glaube, dass diese einfache Lösung funktioniert: Ersetzen Sie den asynchronen Aufruf von getCars() durch einen synchronen Aufruf an einen Sammlungscache, der vor Modellen aufgerufen werden soll.

Das main.js-Startmodul für Anwendungen:

%Vor%

So würde "Cars.model.js" so aussehen:

%Vor%

Diese Lösung verschiebt das asynchrone Problem von Modellen in das Stammdatenbankmodell, wodurch Modelle einfacher zu entwickeln sind.

    
Adrien Joly 22.06.2011 08:14
quelle