Många saker är fel med detta. Det här konceptet fungerar inte.
Till att börja med, din while(true)
loop blockerar händelseloopen så db
kan aldrig få ett värde så din loop slutförs aldrig.
När nätverksoperationen i anslutningen är klar kommer den att lägga till en händelse i händelsekön och återuppringningen som är associerad med den (och sedan det lösta löftet) kan bara köras när du återställer kontrollen tillbaka till händelseslingan så att händelsen kan behandlas.
Men, din while(true)
loop blockerar händelseloopen så att inga händelser kan behandlas. Såvida du inte använder await
inuti loopen (som gör att andra händelser kan köras) kan du inte använda en vänteloop som denna i node.js. Det skapar bara en oändlig loop.
Tills vi har await
på toppnivå som fungerar med modulinitiering (som arbetar med), kan du inte direkt exportera ett värde som erhålls asynkront.
Istället kan du exportera ett löfte och den som ringer måste använda löftet för att få db. Eller exportera en funktion som returnerar ett löfte.
Mer information om problem med busy-wait while loop i dessa andra svar:
javascript - Vad är det för fel med denna while-loop? oändlig loop
Varför gör en medan loop blockera händelseloopen?