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:
Javascript - Was ist falsch an dieser While-Schleife? unendliche Schleife
Warum funktioniert a While-Schleife die Ereignisschleife blockieren?