MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

So legen Sie den Abruf-Callback in Mungo in einer globalen Variablen fest

Super klassischer Anfängerfehler zum Thema Asynchronität :)

Was ist los :

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

Was Sie tun sollten:

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

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

Sie sollten nicht einmal eine globale Variable deklarieren, da dies eine schlechte Praxis ist. Sobald die Daten verfügbar sind, übergeben Sie sie an eine andere Funktion und machen Sie etwas damit. So verschmutzen Sie nicht Ihren globalen Geltungsbereich.

Bearbeiten :Da Sie aus irgendeinem Grund unbedingt eine globale Variable wollen, tun Sie Folgendes:

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!
}