Hos*_*ban 3 javascript mongoose mongodb node.js express
我想设置db全局变量,但是当我从控制台中name取出findOne功能时,我显示未定义,我该怎么办?
var name;
schema.findone({name : 'Bob'} , function(er , db){
name = db;
console.log(db);
});
console.log(name);
Run Code Online (Sandbox Code Playgroud)
谢谢.
关于异步的超级经典初学者错误:)
这是怎么回事 :
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
Run Code Online (Sandbox Code Playgroud)
你应该做什么:
schema.findone({name : 'Bob'} , function(er , db){
doSomethingElse(db);
});
function doSomethingElse(name){
console.log(name); // It's defined.
}
Run Code Online (Sandbox Code Playgroud)
你甚至不会声明一个全局变量,因为这是一个不好的做法.一旦数据可用,将其传递给另一个函数并对其执行某些操作.所以你不会污染你的全球范围.
编辑:由于某些原因你绝对想要一个全局变量,所以这样做:
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!
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2623 次 |
| 最近记录: |