【发布时间】:2015-12-14 11:36:44
【问题描述】:
我在 Mongo 数据库中使用 Sails 和 Waterline ORM。
我有两个模型 User 和 Profile 具有一对一的关系。
下面是我为带有回滚逻辑的事务编写的代码。我认为可能有比这更好的逻辑,因为当前的逻辑非常笨拙。
问题:
- Waterline 或 Sails 是否提供任何用于回滚的功能?
有没有更好的方法?
User.create(newUser).then(function (data) {
var newProfile = {
displayName: data.name,
email: data.email,
user: data._id
}
return Profile.create(newProfile);
}).then(function (profileData) {
sails.log.info("Profile Data " + JSON.stringify(profileData));
// Update the user with Profile Info
User.update(newUser._id, {profile: profileData._id}).then(function (updatedUser) {
return updatedUser;
}, function (err) {
// TODO Rollback logic if the User Updation Fails
})
}, function (err) {
sails.log.error("Failed to Create Profile for the User . Deleting the created User");
var criteria = {
email: data.email
}
User.destroy(criteria).then(function (user) {
sails.log.error("Deleted the Created User " + JSON.stringify(user));
throw new Error("ERROR CREATING User");
}, function (err) {
sails.log.error("ERROR DELETING USER");
throw new Error("ERROR DELETING USER", err);
})
});
【问题讨论】:
标签: mongodb transactions sails.js waterline sails-mongo