我在Parse.com中有一个应用程序,其中包含3个简单类:User
,Alpha
和Beta
。
User
类。Alpha
类Beta
类(共享,收藏等)的对象执行活动时,将填充Alpha
类。 手头的任务:
当从Alpha
类中删除特定用户时,找到一种删除Beta
和User
类中所有对象的方法。现在,如果删除了用户,Alpha
和Beta
类中的子对象仍然是孤立对象,其他用户仍然可以看到这些对象。这导致应用程序不一致。
由于我对Parse后端的理解可以忽略不计,我认为我应该Cloud Code与Background Jobs一起使用(如果我是对的),但我不知道该如何去关于它。
答案 0 :(得分:1)
CloudCode "afterDelete" triggers可能是个不错的选择。这样,可以立即清除孤立对象,并对已删除的用户进行现有引用。上面的链接包含一个非常相似的解决方案的一个很好的例子。
Parse.Cloud.afterDelete("Post", function(request) {
query = new Parse.Query("Comment");
query.equalTo("post", request.object.id);
query.find({
success: function(comments) {
Parse.Object.destroyAll(comments, {
success: function() {},
error: function(error) {
console.error("Error deleting related comments " + error.code + ": " + error.message);
}
});
},
error: function(error) {
console.error("Error finding related comments " + error.code + ": " + error.message);
}
});
});
虽然后台作业可以正常工作,但它的缺点是在安排后台作业之前延迟清理。此外,由于用户已被删除,因此查询和处理孤立对象可能效率低下。
答案 1 :(得分:1)
Before / after delete hook is the way to go, a little bit more particular advice relating to the description of the app, assuming that Alpha objects have a pointer to __User called "createdBy".
I think it's good to get in the habit of using small, promise returning functions to carry out the asynchronous steps. Something like the following...
Parse.Cloud.beforeDelete(Parse.User, function(request, response) {
var user = request.object;
deleteAlphasForUser(user).then(function(result) {
return deleteBetasForUser(user);
}).then(function(result) {
response.success(result);
}, function(error) {
response.error(error);
});
});
function deleteAlphasForUser(user) {
return alphasForUser(user).then(function(alphas) {
return Parse.Object.destroyAll(alphas);
});
}
function alphasForUser(user) {
var query = new Parse.Query("Alpha");
query.equalTo("createdBy", user);
return query.find();
}
I didn't supply deleteBetasForUser or the function that fetches betas, but they ought to be very similar to the functions for the Alpha classes.