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