在保存更新类之前分析云
Parse cloud beforeSave update class
Parse上有一个名为Profiles
的类,它包含一个布尔列isDefault
。
基本上,我试图实现的是,如果在Profiles
上调用save,我希望在保存之前检查添加/更新的对象,如果是isDefault
,则将Profiles
中的所有其他行更改为false,然后保存新的或更新的对象。
对于这个场景,我使用了beforeSave,除了它不运行更新所有Profiles数据的查询之外,所有的东西都在beforeSave中工作,下面是我使用的代码:
Parse.Cloud.beforeSave("Profiles", function(request, response) {
if (request.object.get("imageUrl") == null || request.object.get("imageUrl") == "") {
request.object.set("imageUrl", "http://www.imran.com/xyper_images/icon-user-default.png");
}
if (!request.object.get("isDefault")) {
request.object.set("isDefault", false);
}else{
var query = new Parse.Query("Profiles");
query.equalTo("user", request.object.get("user"));
query.find().then(function(results) {
for (var i = 0; i < results.length; i++) {
var pro = results[i];
pro.set("isDefault", false);
pro.save();
}
}
);
}
response.success();
});
在您的代码中,response.success()可能在对所有对象完成save()操作之前返回。
平行承诺
我会通过使用并行承诺来解决这个问题(您也可以尝试使用串行承诺或使用saveAll方法的方法):
var query = new Parse.Query("Profiles");
query.equalTo("user", request.object.get("user"));
query.find().then(function(results) {
var promises = [];
for (var i = 0; i < results.length; i++) {
var pro = results[i];
pro.set("isDefault", false);
promises.push(pro.save());
}
return Parse.Promise.when(promises);
}).then(function(result) {
response.success();
},function(error){
response.error();
});
全部保存
下面是一个使用saveAll方法的解决方案。根据Parse JS文档,saveAll()不会返回promise。所以这里的语法有点混乱(我不喜欢像这里那样混合promise,但我不想过多地修改您的原始代码)。
var query = new Parse.Query("Profiles");
query.equalTo("user", request.object.get("user"));
query.find().then(function(results) {
for (var i = 0; i < results.length; i++) {
var pro = results[i];
pro.set("isDefault", false);
}
Parse.Object.saveAll(results, {
success: function(list) {
response.success();
},
error: function(error) {
response.error();
}
});
}, function(error){
response.error();
});
相关文章:
- JavaScript-保存、存储和更新数组
- 使用odata 4的jaydata 1.5和保存/更新数据时的错误
- AngularJS服务(更新/保存)
- Angular js,在选择元素上,我想 POST 数据以将其保存在数据库中,然后我想使用 PUT 更新它而无需重新加载
- 如何在jQuery中的单个保存按钮上更新数据和添加数据
- 在保存更新类之前分析云
- 编辑以前保存的文档也会更新数据库中的文档
- 如何在asp中保存服务器中的更新完整日历事件
- 使用Javascript中生成的XML将现有XML保存/更新到服务器
- 保存后更新Mongoose
- 将更新后的值保存到数据库中,并在html表中显示
- MongoDB Mongoose使用数组保存或更新
- 如何在保存后自动更新时识别Selenium页面中的元素?(自动化相关)
- 如何在JEditable/JQuery中保存事件后字段的更新值
- 保存/更新MVC 5中Content文件夹中的现有文件
- indexedDb-使用两个独立的密钥(本地和服务器ID/联机和脱机)进行保存/更新
- 如何保存更新json(文件json)与jquery或javascript
- 保存(更新)现有模型时未触发验证
- Ember.js保存更新的对象而不保存Ember数据
- 在Opera保存/更新网页密码