最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - How to set retrieve callback in mongoose, in a global variable - Stack Overflow

programmeradmin2浏览0评论

I want to set db in global variable, but when I get console name out of findOne function show me undefined, What can I do?

var name;

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

console.log(name);

thank you.

I want to set db in global variable, but when I get console name out of findOne function show me undefined, What can I do?

var name;

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

console.log(name);

thank you.

Share Improve this question edited Jun 4, 2015 at 6:34 Ozair Kafray 13.5k8 gold badges60 silver badges85 bronze badges asked Jun 4, 2015 at 6:31 Hossein MarzbanHossein Marzban 531 silver badge6 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 8

Super classic beginner mistake about asynchronism :)

What's going on :

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

What you should do :

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

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

You souldn't even declare a global variable, as it's a bad practice. As soon as the data is available, pass it to another function and do something with it. So you don't pollute your global scope.

Edit : Since you absolutely want a global variable for some reason, then do this :

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!
}
发布评论

评论列表(0)

  1. 暂无评论