sql >> Database >  >> NoSQL >> MongoDB

Hoe u terugbellen in mangoest instelt, in een globale variabele

Super klassieke beginnersfout over asynchronisme :)

Wat is er aan de hand :

var name; // FIRST you declare the name variable

schema.findone({name : 'Bob'} , function(er , db){ // SECOND you launch a request to the DB
  name = db; // FOURTH name is populated.
  console.log(db);
});

console.log(name); // !! THIRD !! you log name - it's empty

Wat u moet doen:

schema.findone({name : 'Bob'} , function(er , db){
  doSomethingElse(db);
});

function doSomethingElse(name){
    console.log(name); // It's defined.
}

Je zou niet eens een globale variabele moeten declareren, omdat het een slechte gewoonte is. Zodra de gegevens beschikbaar zijn, geef je deze door aan een andere functie en doe je er iets mee. U vervuilt dus uw wereldwijde bereik niet.

Bewerken :Aangezien je om de een of andere reden absoluut een globale variabele wilt, doe dan dit :

var name;

schema.findone({name : 'Bob'} , function(er , db){
  name = db;
  console.log(name); // works fine
  doSomethingElse();
});

console.log(name); // name is empty here, because the DB request is still in progress at this stage

function doSomethingElse(){
    console.log(name); // Tadaaaa! It's a global variable and is defined!
}



  1. Paginering implementeren met MongoDB, Express.js &Slush

  2. Installeer MongoDB op Windows

  3. MongoDB:forEach vs fetch + each

  4. MongoDB-update met voorwaarde