sql >> Database teknologi >  >> NoSQL >> MongoDB

ved at bruge module.exports på en usædvanlig måde

Der er mange ting galt med dette. Dette koncept virker ikke.

For det første, din while(true) loop blokerer begivenhedsløkken så db kan aldrig få en værdi, så din loop bliver aldrig fuldført.

Når netværksoperationen i forbindelsen er fuldført, vil den tilføje en hændelse til hændelseskøen, og tilbagekaldet tilknyttet den (og derefter det løste løfte) kan kun køre, når du returnerer kontrollen tilbage til hændelsesløkken, så hændelsen kan blive behandlet.

Men din while(true) loop blokerer hændelsesløkken, så ingen hændelser kan blive behandlet. Medmindre du bruger await inde i løkken (som tillader andre begivenheder at køre), kan du ikke bruge en venteløkke som denne i node.js. Det skaber bare en uendelig løkke.

Indtil vi har await på øverste niveau der fungerer med modulinitialisering (som der arbejdes på), kan du ikke direkte eksportere en værdi opnået asynkront.

I stedet kan du eksportere et løfte, og den, der ringer, skal bruge løftet for at få db. Eller eksporter en funktion, der returnerer et løfte.

Mere info om problemer med optaget-vent mens-løkken i disse andre svar:

Vent indtil flag=true

javascript - Hvad er der galt med denne while-løkke? never ending loop

Hvorfor gør en mens loop blokere begivenhedsløkken?




  1. Hvordan forhindrer man en mongobruger i at droppe en samling?

  2. MongoDB via Mongoose JS - Hvad er findByID?

  3. Forespørgsel efter lignende array i MongoDB

  4. Find max element inde i et array