Sai lầm siêu kinh điển dành cho người mới bắt đầu về chủ nghĩa không đồng bộ :)
Chuyện gì đang xảy ra:
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
Bạn nên làm gì:
schema.findone({name : 'Bob'} , function(er , db){
doSomethingElse(db);
});
function doSomethingElse(name){
console.log(name); // It's defined.
}
Bạn thậm chí không thể khai báo một biến toàn cục, vì đó là một phương pháp không tốt. Vì vậy, bạn không làm ô nhiễm phạm vi toàn cầu của mình.
Chỉnh sửa :Vì bạn hoàn toàn muốn có một biến toàn cục vì lý do nào đó, hãy làm như sau:
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!
}