Hier gaat veel mis. Dit concept werkt niet.
Om te beginnen, uw while(true)
lus blokkeert de gebeurtenislus dus db
kan nooit een waarde krijgen, dus uw lus wordt nooit voltooid.
Wanneer de netwerkbewerking in de verbinding is voltooid, wordt een gebeurtenis aan de gebeurteniswachtrij toegevoegd en kan de bijbehorende callback (en vervolgens de opgeloste belofte) alleen worden uitgevoerd wanneer u de controle teruggeeft aan de gebeurtenislus, zodat de gebeurtenis kan worden verwerkt.
Maar, uw while(true)
loop blokkeert de gebeurtenislus, zodat er geen gebeurtenissen kunnen worden verwerkt. Tenzij je await
gebruikt binnen de lus (waardoor andere gebeurtenissen kunnen worden uitgevoerd), kunt u geen wachtlus zoals deze gebruiken in node.js. Het creëert gewoon een oneindige lus.
Totdat we op het hoogste niveau await
die werkt met module-initialisatie (waar aan wordt gewerkt), kunt u een asynchroon verkregen waarde niet rechtstreeks exporteren.
In plaats daarvan kunt u een belofte exporteren en de beller moet de belofte gebruiken om de db te krijgen. Of exporteer een functie die een belofte retourneert.
Meer informatie over problemen met de while-lus tijdens bezet wachten in deze andere antwoorden:
javascript - Wat is er mis met deze while-lus? oneindige lus
Waarom doet een while-lus de gebeurtenislus blokkeren?