Mongoose save()不返回promise

时间:2018-03-10 22:50:08

标签: node.js mongoose promise

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(...)但它仍然无效。

感谢您阅读我的留言并祝您愉快!

1 个答案:

答案 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());
}

(注:regarding .finally()