[英]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.