我有一个猫鼬数据库查询
var player;
Users.findById(req.user._id,function(err,user){
console.log('>>> user: '+user); //----2
player = user;
});
console.log('>>> player: '+player); // ----1
此代码中的 1
在2
之前执行,因为2
位于回调中。
有没有办法避免这种情况?
答案 0 :(得分:2)
您必须在与log
变量相同的命名空间中创建另一个函数(比如说player
),将console.log('>>> player: '+player);
放到其中并在分配{log
后调用player
1}}。
因此, player
回调和findById
函数都可以看到log
变量。
以下是代码:
var player;
Users.findById(req.user._id,function(err,user){
console.log('>>> user: '+user);
player = user;
log();
});
function log() {
console.log('>>> player: '+player);
}
答案 1 :(得分:1)
您需要在回调中拨打1。例如,类似的东西:
var player;
Users.findById(req.user._id,function(err,user){
console.log('>>> user: '+user); // ----1
player = user;
showPlayer();
});
var showPlayer = function() {
console.log('>>> player: '+player); // ----2
}
答案 2 :(得分:0)
试试这个:
var player;
Users.findById(req.user._id,function(err,user){
console.log('>>> user: '+user); //----1
player = user;
console.log('>>> player: '+player); // ----2
});
更新:
这可能是另类
var mainFunction = function(player){
if(!player){
Users.findById(req.user._id,function(err,user){
console.log('>>> user:', user);
mainFunction(user);
});
} else {
console.log('>>> player: '+player);
}
};
mainFunction();