避免强制回调

时间:2014-01-23 13:03:06

标签: javascript node.js mongoose

我有一个猫鼬数据库查询

var player;
Users.findById(req.user._id,function(err,user){     
    console.log('>>> user: '+user); //----2
    player = user;
    });
console.log('>>> player: '+player);    // ----1
此代码中的

12之前执行,因为2位于回调中。

有没有办法避免这种情况?

3 个答案:

答案 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();