Kesalahan pemula super klasik tentang asinkronisme :)
Apa yang terjadi :
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
Yang harus kamu lakukan :
schema.findone({name : 'Bob'} , function(er , db){
doSomethingElse(db);
});
function doSomethingElse(name){
console.log(name); // It's defined.
}
Anda bahkan tidak dapat mendeklarasikan variabel global, karena ini adalah praktik yang buruk. Segera setelah data tersedia, teruskan ke fungsi lain dan lakukan sesuatu dengannya. Jadi Anda tidak mencemari ruang lingkup global Anda.
Sunting :Karena Anda benar-benar menginginkan variabel global untuk beberapa alasan, lakukan ini :
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!
}