sql >> Databáze >  >> NoSQL >> MongoDB

pomocí module.exports neobvyklým způsobem

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:

Počkejte, dokud flag=true

javascript - Co je špatného na tomto cyklu while? nikdy nekončící smyčka

Proč smyčka while blokuje smyčku událostí?




  1. jak získat všechny klíče a hodnoty v redis v javascriptu?

  2. MongoDB vrátí True, pokud dokument existuje

  3. Průsečík indexu vs. složený index?

  4. MongoDB - stránkování