我可以让 model.save() 有一个返回值吗?
Posted
技术标签:
【中文标题】我可以让 model.save() 有一个返回值吗?【英文标题】:Can i get model.save() to have a return value? 【发布时间】:2017-05-21 12:51:34 【问题描述】:我是 node 新手,我正在尝试通过 mongoose 将一些东西保存到 mongo。 如果 save 有错误,我想返回 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);
【问题讨论】:
【参考方案1】:你不应该不要同步,否则你会阻塞你的整个Node线程。
相反,您应该做的是返回一个承诺,或者一个带有回调的简单函数。 (比如mongoose saving one,注意mongoose 两者都支持)
你可以return newUser.save()
然后你会像addUser.then()
一样运行它。此外,您可以删除 module.exports = function()
并使用 callback
或 promise
执行 module.exports
函数。
【讨论】:
【参考方案2】:NodeJs 是单线程进程,你不应该用同步调用阻塞它。
当您收到来自 mongodb 的响应时,您应该传递一个回调函数来执行任何操作。
当进入 NodeJs 时,这是从调用和阻塞到回调的重大转变。
【讨论】:
以上是关于我可以让 model.save() 有一个返回值吗?的主要内容,如果未能解决你的问题,请参考以下文章
如果函数返回多种类型,我可以声明一个函数返回值吗? [复制]