Wiele rzeczy jest z tym nie tak. Ta koncepcja nie zadziała.
Na początek, Twój while(true)
pętla blokuje pętlę zdarzeń, więc db
nigdy nie może uzyskać wartości, więc twoja pętla nigdy się nie kończy.
Gdy operacja sieciowa w połączeniu zakończy się, doda zdarzenie do kolejki zdarzeń, a powiązane z nim wywołanie zwrotne (a następnie rozwiązana obietnica) może zostać uruchomione tylko wtedy, gdy zwrócisz kontrolę z powrotem do pętli zdarzeń, aby zdarzenie mogło zostać przetworzone.
Ale twój while(true)
loop blokuje pętlę zdarzeń, więc żadne zdarzenia nie mogą zostać przetworzone. Chyba że używasz await
wewnątrz pętli (która pozwala na uruchamianie innych zdarzeń), nie możesz użyć pętli oczekiwania, takiej jak ta w node.js. Po prostu tworzy nieskończoną pętlę.
Dopóki nie mamy najwyższego poziomu await
który działa z inicjalizacją modułu (nad którym trwają prace), nie można bezpośrednio wyeksportować wartości uzyskanej asynchronicznie.
Zamiast tego możesz wyeksportować obietnicę, a wywołujący musi użyć obietnicy, aby uzyskać bazę danych. Lub wyeksportuj funkcję, która zwraca obietnicę.
Więcej informacji o problemach z pętlą zajętości oczekiwania while w tych innych odpowiedziach:
javascript - Co jest nie tak z tą pętlą while? niekończąca się pętla
Dlaczego podczas gdy pętla blokuje pętlę zdarzeń?