将 Promise 与 Mongoose 结合使用的最佳实践
Best Practice of using Promise with Mongoose
我对这个 promise 概念还很陌生。我不确定,但看看这个,我相信我只是在使用 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);
});
});
};
知道如何在不创建新承诺的情况下使用 Mongoose 返回的承诺吗?
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;
});
};
(虽然我不确定你为什么要创建一个可能已经存在的用户)。
说得对:Mongoose 已经支持 promises。另外,我认为您不需要使用新凭据创建新用户,而是需要更改当前用户的密码。我在调用 "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);
});
};
我对这个 promise 概念还很陌生。我不确定,但看看这个,我相信我只是在使用 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);
});
});
};
知道如何在不创建新承诺的情况下使用 Mongoose 返回的承诺吗?
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;
});
};
(虽然我不确定你为什么要创建一个可能已经存在的用户)。
说得对:Mongoose 已经支持 promises。另外,我认为您不需要使用新凭据创建新用户,而是需要更改当前用户的密码。我在调用 "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);
});
};