我是节点的新手,我正试图通过mongoose将某些东西保存到mongo。 如果保存有错误,我想返回false(例如,有一个用户具有当前名称)。 问题是console.logs 1:2:6:7:3:4:5的顺序 有没有办法可以同步调用adduser?
module.exports.addUser = function(username,password){
console.log(1);
var newUser = User({
username:username,
password:password
});
console.log(2);
newUser.save(function(err,prod,numeffect){
if (err){
console.log(err);
}
if (numeffect === 1){
console.log(3);
console.log("num effect = "+numeffect);
}
console.log(4);
console.log(prod);
}).then(function(doc){console.log(5)});
console.log(6);
}
mongoose.addUser(req.body.username,req.body.password);
console.log(7);
答案 0 :(得分:1)
您应该不 同步,否则您将阻止整个Node线程。
相反,你应该做的是返回一个promise或一个带回调的简单函数。 (如mongoose saving one,注意猫鼬支持两者)
您可以执行return newUser.save()
然后你就像addUser.then()
一样运行它。此外,您可以使用module.exports = function()
或module.exports
删除callback
并执行promise
您的功能。
答案 1 :(得分:0)
NodeJs是单线程进程,您不应该使用同步调用来阻止它。
当您收到来自mongodb的回复时,您应该传递一个回调函数来执行任何操作。
当进入NodeJ时,这是从调用和阻止到回调的重大转变。