Super klassisk begynderfejl om asynkronisme :)
Hvad sker der :
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
Hvad du skal gøre :
schema.findone({name : 'Bob'} , function(er , db){
doSomethingElse(db);
});
function doSomethingElse(name){
console.log(name); // It's defined.
}
Du burde ikke engang deklarere en global variabel, da det er en dårlig praksis. Så snart dataene er tilgængelige, skal du videregive dem til en anden funktion og gøre noget med dem. Så du forurener ikke dit globale omfang.
Rediger :Da du absolut ønsker en global variabel af en eller anden grund, så gør dette :
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!
}