我有一个函数findUser
,我试图使用sails
, MongoDb
和mongoose
实现,如下所示:
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.findOne
和console.log()
函数,并且不等待MongoDB调用返回的数据。在exec承诺本身中,代码是同步运行的,因此将console.log放在exec函数中将解决这个问题。
function findUser(user_id){
User.findOne({_id: user_id})
.exec(function (err, userdata){
//Some Logic
console.log("XYZ")
});
};