Na tomhle je spousta věcí špatně. Tento koncept nebude fungovat.
Pro začátek, vaše while(true)
loop blokuje smyčku událostí, takže db
nemůže nikdy získat hodnotu, takže se vaše smyčka nikdy nedokončí.
Když se síťová operace v připojení dokončí, přidá událost do fronty událostí a zpětné volání s ní spojené (a poté vyřešený příslib) se může spustit pouze tehdy, když vrátíte řízení zpět do smyčky událostí, aby mohla být událost zpracována.
Ale vaše while(true)
smyčka blokuje smyčku událostí, takže nelze zpracovat žádné události. Pokud nepoužíváte await
uvnitř smyčky (která umožňuje spouštění dalších událostí), nemůžete použít čekací smyčku, jako je tato v node.js. Prostě to vytváří nekonečnou smyčku.
Dokud nebudeme mít nejvyšší úroveň await
který pracuje s inicializací modulu (na které se pracuje), nelze přímo exportovat hodnotu získanou asynchronně.
Místo toho můžete exportovat slib a volající musí použít slib, aby získal db. Nebo exportujte funkci, která vrací slib.
Další informace o problémech se smyčkou busy-wait while v těchto dalších odpovědích:
javascript - Co je špatného na tomto cyklu while? nikdy nekončící smyčka
Proč smyčka while blokuje smyčku událostí?