簡體   English   中英

在貓鼬中使用Promise的最佳實踐

[英]Best Practice of using Promise with Mongoose

我對這個諾言概念很陌生。 我不確定,但是看着這個,我相信我只是將promise用作回調,而我以promise地獄結束!

我有這個功能,它想從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);
          });
      });
};

任何想法如何使用貓鼬返回的諾言而不創建新的諾言?

貓鼬已經支持諾言 ,所以我認為您可以將代碼重寫為:

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;
  });
};

(盡管我不確定您為什么要創建可能已經存在的用戶)。

正確地說:貓鼬已經支持諾言 另外,我不認為您需要使用新憑據創建新用戶,而需要更改當前用戶的密碼。 另外,我在調用“ changePassword”函數時返回了數據。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM