如何确保在Mongoose的console.log中执行一个函数



我有一个函数findUser,我试图使用sails, MongoDbmongoose实现,如下所示:

  findUser(userId);
  function findUser(user_id){
    User.findOne({
            _id: user_id
        }).exec(function (err, userdata){
         //Some Logic
    });
  }
    console.log("XYZ");

这里的User是一个模型,我基于findUser函数收到的user_id对特定的_id执行findOne操作。在node Inspector中运行时,我发现我的console.log语句在findUser函数完成之前被打印出来。我的问题是如何确保我的findUser函数首先执行,然后我的console.log is打印在猫鼬?

您需要将console.log放在执行回调中。

这是由于Node.js和它是异步操作的事实。它同时运行User.findOneconsole.log()函数,并且不等待MongoDB调用返回的数据。在exec承诺本身中,代码是同步运行的,因此将console.log放在exec函数中将解决这个问题。

function findUser(user_id){
  User.findOne({_id: user_id})
      .exec(function (err, userdata){
         //Some Logic
         console.log("XYZ")        
      });
};

最新更新