javascript - 将 Promise 与 Mongoose 结合使用的最佳实践

标签 javascript node.js mongodb mongoose mongoose-schema

我对这个 promise 概念还很陌生。我不确定,但看看这个,我相信我只是使用 Promise 作为回调,而我最终会陷入 Promise hell !

我有这个函数,它应该从 MongoUser 数据库获取用户对象,更新它并再次保存它。这是我的代码片段:

var changePassword = function(data){
      return new Promise(function(fulfill, reject){
        MongoUser.findOne({username: data.username}).exec()
          .then(function(mongoUser){
            //mongoUser = new MongoUser();
            //mongoUser.username = data.username;
            mongoUser.password = data.password;
            mongoUser.save().then(function(){
              fulfill(data);
            }).catch(function(error){
              log.error("MongoDB Failed in updating data", {"error": error});
              reject(error);
            });
          })
          .catch(function(error){
            log.error("MongoDB Failed in updating data", {"error": error});
            reject(error);
          });
      });
};

知道如何使用 Mongoose 返回的 promise 而不创建新的 promise 吗?

最佳答案

Mongoose supports promises已经,所以我认为你可以将代码重写为:

var changePassword = function(data) {
  return MongoUser.findOne({username: data.username}).then(function(mongoUser) {
    mongoUser = new MongoUser();
    mongoUser.username = data.username;
    mongoUser.password = data.password;
    return mongoUser.save();
  }).catch(function(error){
    log.error("MongoDB Failed in updating data", {"error": error});
    throw error;
  });
};

(尽管我不确定您为什么要创建一个可能已经存在的用户)。

关于javascript - 将 Promise 与 Mongoose 结合使用的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38042964/

相关文章:

node.js - npm/gulp 获取大量未在 package.json 中定义的模块

javascript - 在客户端压缩图像(AngularJS)并上传到服务器(NodeJS)

json - 对象键后的字符无效 - geojson 中的对象键是什么?

javascript - 如何更新 Angular UI 网格中的数据?

javascript - 如何使用javascript删除文件?

javascript - Gulp imagemin dest.on is not a function 错误

mongodb - Mongoose,更新另一个数组内的数组内的对象

php - PHP 中的 Mongodb MapReduce

javascript - 将变量从 <script> 传递到 HTML 代码?

Javascript 事件链/绑定(bind)