Mongoose的文档证实方法save会返回一个承诺。我想使用此方法在我的数据库中保存用户模型。我这样做:
<script src="https://cdnjs.cloudflare.com/ajax/libs/vis/4.21.0/vis.min.js"></script>
<button id="button">Change node color</button>
<div id="container"></div>
请注意,用户参数是:
save (user) {
user.save((err, user) => {
if (err) {
return handleError(err);
} else {
console.log('The user ' + user.screenName + ' has been added.');
}
this.db.close();
});
}
我不明白为什么下面的console.log返回false:
mongoose.model('User', this.userSchema);
当然,当我试着()承诺我不起作用时。
我错过了什么吗?我也尝试返回user.save(...)但它仍然无效。
感谢您阅读我的留言并祝您愉快!
答案 0 :(得分:2)
首先,您的save(user)
方法目前还没有return
任何内容,因此无论Mongoose是什么,结果都始终为undefined
&#39;}行为:
console.log(typeof userRepository.save(user) === 'undefined'); // true
但是,Mongoose通常会让您选择其每种方法的回调或承诺。文档对此没有特别清楚,beyond implying it through example snippets:
回调:
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());
}