我可以让 model.save() 有一个 return 值吗?

Can i get model.save() to have a return value?

我是节点的新手,我正在尝试通过 mongoose 将一些东西保存到 mongo。 如果保存有错误(例如,有一个用户使用当前名称),我想 return 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);

你不应该它们同步,否则你会阻塞整个节点线程。

相反,您应该做的是 return 承诺,或带有回调的简单函数。 (比如 mongoose saving one,注意 mongoose 两者都支持)

你可以return newUser.save()

然后你会 运行 喜欢 addUser.then()。此外,您可以删除 module.exports = function() 并使用 callbackpromise 执行 module.exports 您的功能。

NodeJs 是单线程进程,你不应该用同步调用阻塞它。

当您收到来自 mongodb 的响应时,您应该传递一个回调函数来执行任何操作。

当进入 NodeJs 时,这是从调用和块到回调的重要切换。