MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

wykorzystanie module.exports w nietypowy sposób

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:

Poczekaj, aż flaga=true

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ń?




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak MongoDB indeksuje tablice?

  2. MongoDB - Różnica między indeksem w polu tekstowym a indeksem tekstowym?

  3. Pobierz tylko żądany element z tablicy obiektów w kolekcji MongoDB

  4. Ulepszenia struktury agregacji MongoDB 2.6

  5. Jak przechowywać wyniki z dynamicznie generowanych formularzy w MongoDb?