MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Verwendung von module.exports auf ungewöhnliche Weise

Viele Dinge sind dabei falsch. Dieses Konzept wird nicht funktionieren.

Für den Anfang, Ihr while(true) loop blockiert die Ereignisschleife, also db kann niemals einen Wert erhalten, sodass Ihre Schleife niemals abgeschlossen wird.

Wenn die Netzwerkoperation in der Verbindung abgeschlossen ist, fügt sie der Ereigniswarteschlange ein Ereignis hinzu, und der damit verbundene Rückruf (und dann die aufgelöste Zusage) kann nur ausgeführt werden, wenn Sie die Steuerung wieder an die Ereignisschleife zurückgeben, damit das Ereignis verarbeitet werden kann.

Aber Ihr while(true) loop blockiert die Ereignisschleife, sodass keine Ereignisse verarbeitet werden können. Es sei denn, Sie verwenden await Innerhalb der Schleife (die die Ausführung anderer Ereignisse zulässt) können Sie in node.js keine Warteschleife wie diese verwenden. Es erzeugt nur eine Endlosschleife.

Bis wir await auf oberster Ebene haben die mit der Modulinitialisierung funktioniert (an der gearbeitet wird), können Sie einen asynchron erhaltenen Wert nicht direkt exportieren.

Stattdessen können Sie ein Versprechen exportieren und der Aufrufer muss das Versprechen verwenden, um die db zu erhalten. Oder exportieren Sie eine Funktion, die ein Versprechen zurückgibt.

Weitere Informationen zu Problemen mit der Busy-Wait-While-Schleife in diesen anderen Antworten:

Warte bis flag=true

Javascript - Was ist falsch an dieser While-Schleife? unendliche Schleife

Warum funktioniert a While-Schleife die Ereignisschleife blockieren?