Der er mange ting galt med dette. Dette koncept virker ikke.
For det første, din while(true)
loop blokerer begivenhedsløkken så db
kan aldrig få en værdi, så din loop bliver aldrig fuldført.
Når netværksoperationen i forbindelsen er fuldført, vil den tilføje en hændelse til hændelseskøen, og tilbagekaldet tilknyttet den (og derefter det løste løfte) kan kun køre, når du returnerer kontrollen tilbage til hændelsesløkken, så hændelsen kan blive behandlet.
Men din while(true)
loop blokerer hændelsesløkken, så ingen hændelser kan blive behandlet. Medmindre du bruger await
inde i løkken (som tillader andre begivenheder at køre), kan du ikke bruge en venteløkke som denne i node.js. Det skaber bare en uendelig løkke.
Indtil vi har await
på øverste niveau der fungerer med modulinitialisering (som der arbejdes på), kan du ikke direkte eksportere en værdi opnået asynkront.
I stedet kan du eksportere et løfte, og den, der ringer, skal bruge løftet for at få db. Eller eksporter en funktion, der returnerer et løfte.
Mere info om problemer med optaget-vent mens-løkken i disse andre svar:
javascript - Hvad er der galt med denne while-løkke? never ending loop
Hvorfor gør en mens loop blokere begivenhedsløkken?