猫鼬保存()不返回承诺
Posted
技术标签:
【中文标题】猫鼬保存()不返回承诺【英文标题】:Mongoose save() doesn't return promise 【发布时间】:2018-08-19 06:26:35 【问题描述】:Mongoose 的文档确认方法 save 返回一个承诺。我想使用这种方法在我的数据库中保存一个用户模型。我就是这样做的:
save (user)
user.save((err, user) =>
if (err)
return handleError(err);
else
console.log('The user ' + user.screenName + ' has been added.');
this.db.close();
);
注意用户参数是:
mongoose.model('User', this.userSchema);
我不明白为什么下面的 console.log 返回 false :
console.log((userRepository.save(user) instanceof Promise));
当然,当我尝试 then() 时,我的承诺是行不通的。
我错过了什么吗?我也尝试过返回 user.save(...) 但还是不行。
感谢您阅读我的信息,祝您有美好的一天!
【问题讨论】:
【参考方案1】:首先,您的 save(user)
方法本身目前没有 return
任何东西,因此无论 Mongoose 的行为如何,结果将始终为 undefined
:
console.log(typeof userRepository.save(user) === 'undefined'); // true
不过,Mongoose 通常会让您在其每个方法中选择回调或承诺。 除了通过示例 sn-ps 暗示之外,文档对此并不是特别清楚: Mongoose's documentation does now clarify this:
返回:
«Promise,undefined» 如果与回调一起使用,则返回 undefined,否则返回 Promise。
回调:
product.sold = Date.now(); product.save(function (err, product) if (err) .. )
承诺:
product.save().then(function(product) ... );
在你的情况下,如果你想返回一个Promise
,那么你的save(user)
方法也必须使用return
他们:
save (user)
return user.save()
.then(user => console.log('The user ' + user.screenName + ' has been added.'))
.catch(err => handleError(err))
.finally(() => user.db.close());
(注:regarding .finally()
)
【讨论】:
非常感谢乔纳森·洛诺夫斯基! 嗨@JonathanLonowski,您将如何制作上面的示例 aync ?会不会是:async save (user) return await user.save() .then(user => console.log('The user ' + user.screenName + ' has been added.')) .catch(err => handleError(err)) .finally(() => user.db.close());
以上是关于猫鼬保存()不返回承诺的主要内容,如果未能解决你的问题,请参考以下文章