Много неща не са наред с това. Тази концепция няма да работи.
Като начало, вашият while(true)
loop блокира цикъла на събитията, така че db
никога не може да получи стойност, така че вашият цикъл никога не завършва.
Когато мрежовата операция в свързването завърши, тя ще добави събитие към опашката на събития и обратното извикване, свързано с него (и след това разрешеното обещание), може да се изпълни само когато върнете контрола обратно към цикъла на събития, така че това събитие да може да бъде обработено.
Но вашият while(true)
loop блокира цикъла на събитията, така че никакви събития не могат да бъдат обработени. Освен ако не използвате await
вътре в цикъла (който позволява да се изпълняват други събития), не можете да използвате цикъл на изчакване като този в node.js. Той просто създава безкраен цикъл.
Докато имаме await
от най-високо ниво който работи с инициализация на модул (по който се работи), не можете директно да експортирате стойност, получена асинхронно.
Вместо това можете да експортирате обещание и повикващият трябва да използва обещанието, за да получи db. Или експортирайте функция, която връща обещание.
Повече информация за проблемите с цикъла заето и изчакване в тези други отговори:
javascript - Какво не е наред с този цикъл while? безкраен цикъл
Защо докато цикълът блокира цикъла на събитията?