我尝试完成的任务:
表位置:
情景的:
因此,在位置表的最后,用户可以拥有多个位置,但只有1个可以同时处于活动状态。 我认为这是cloudcode的完美之处
我把它放在cloudcode中就像之前一样保存:
Parse.Cloud.beforeSave("Location", function(request, response) {
var query = new Parse.Query("Location");
query.equalTo("user", request.object.get("user"));
query.equalTo("active", true);
query.find({
success: function(results) {
//get all objects in the table and set the active property to false
for (var i = 0; i < results.length; i++) {
var object = results[i];
object.set('active',false);
object.save();
}
response.success();
},
error: function(error) {
response.error(error.message);
}
});
}
});
猜猜会发生什么......所有对象都设置为false,我想我知道为什么......因为当你在cloudcode中保存一个对象时,它会在再次保存钩子之前调用解析云吗?
我能做些什么或我的逻辑错了吗?
答案 0 :(得分:1)
我建议这个解决方案:
Parse.Cloud.beforeSave("Location", function(request, response) {
var location = request.object;
if (location.get("active")){
var query = new Parse.Query("Location");
query.equalTo("user", request.object.get("user"));
query.equalTo("active", true);
query.first().then(function(result){
results.set('active',false);
results.save()
.then(function(){
response.success();
});
},function (error) {
response.error(error.message);
});
} else {
response.success();
}
});
因此,当您保存“inActive”位置时,beforeSave响应就可以了。如果您保存一个新的活动位置,它将首先检查唯一的活动locaton(query.first)并将其设置为非活动状态(通过这种方式,它会在beforeSave成功之前),然后保存新的活动位置。