sql >> Database >  >> NoSQL >> MongoDB

module.exports op een ongebruikelijke manier gebruiken

Hier gaat veel mis. Dit concept werkt niet.

Om te beginnen, uw while(true) lus blokkeert de gebeurtenislus dus db kan nooit een waarde krijgen, dus uw lus wordt nooit voltooid.

Wanneer de netwerkbewerking in de verbinding is voltooid, wordt een gebeurtenis aan de gebeurteniswachtrij toegevoegd en kan de bijbehorende callback (en vervolgens de opgeloste belofte) alleen worden uitgevoerd wanneer u de controle teruggeeft aan de gebeurtenislus, zodat de gebeurtenis kan worden verwerkt.

Maar, uw while(true) loop blokkeert de gebeurtenislus, zodat er geen gebeurtenissen kunnen worden verwerkt. Tenzij je await gebruikt binnen de lus (waardoor andere gebeurtenissen kunnen worden uitgevoerd), kunt u geen wachtlus zoals deze gebruiken in node.js. Het creëert gewoon een oneindige lus.

Totdat we op het hoogste niveau await die werkt met module-initialisatie (waar aan wordt gewerkt), kunt u een asynchroon verkregen waarde niet rechtstreeks exporteren.

In plaats daarvan kunt u een belofte exporteren en de beller moet de belofte gebruiken om de db te krijgen. Of exporteer een functie die een belofte retourneert.

Meer informatie over problemen met de while-lus tijdens bezet wachten in deze andere antwoorden:

Wacht tot flag=true

javascript - Wat is er mis met deze while-lus? oneindige lus

Waarom doet een while-lus de gebeurtenislus blokkeren?




  1. redis + gevent - Slechte prestaties - wat doe ik verkeerd?

  2. Wat is Mongoose-fout Gegoten naar ObjectId mislukt voor waarde XXX op pad _id?

  3. Mongodb-verzameling als dynamisch

  4. MongoDB-taakverdeling in meerdere AWS-instanties