问题: 使用Parse Cloud Code的afterDelete触发器级联删除来自不同Parse类的多个对象。例如,在用户删除帖子后,我还想删除与该帖子相关的评论和喜欢。 让我们在Parse说我有一个帖子,评论和喜欢的课程。
我认为我的代码的问题与以下任何一个或两个有关: 1.在适当的位置使用{useMasterKey:true} 2.将关联的注释结果传递给关联的喜欢导致以下然后是promise块,以便通过destroyAll()将它们一起删除 我已经搜索了现有的Parse-server Github问题,并尝试了StackOverflow论坛,但还没有找到任何帮助解决这个问题。
重现的步骤:
这里是我编写的代码(不工作):
Parse.Cloud.afterDelete("Post", function(request) {
var objectsToDelete = [];
var commentQuery = new Parse.Query("Comment");
commentQuery.equalTo("post", request.object);
commentQuery.find({useMasterKey: true}).then(function(comments) {
var likeQuery = new Parse.Query("Like");
likeQuery.equalTo("post", request.object);
objectsToDelete.push(comments);
return likeQuery.find({useMasterKey: true});
}).then(function(likes) {
objectsToDelete.push(likes);
return Parse.Object.destroyAll(objectsToDelete, {useMasterKey: true});
}).then(function(success) {
console.log("successfully deleted all associated comments AND likes.");
}, function(error) {
console.error("Error deleting associated comments and likes " + error.code + ": " + error.message);
});
});
预期结果 用户删除帖子后,还应删除与该帖子相关的评论和喜欢。
实际结果 没有与帖子相关的评论或喜欢被删除。
环境设置
解析服务器版本:2.3.2(最新) 操作系统:使用Swift的iOS(客户端) 在Heroku上托管的服务器
关于这里可能存在什么问题的任何想法?谢谢!
答案 0 :(得分:1)
根据文档,Parse.Object.destroyAll
接受一个对象数组,如
Parse.Object.destroyAll([object1, object2, object3])
但我假设comments
和likes
是对象数组,所以你称之为
Parse.Object.destroyAll([[comment1, comment2, ...], [like1, like2, ...]])
所以,快速修复,使用[].push.apply(objectsToDelete, array of objects)
就像这样
}).then(function(comments) {
var likeQuery = new Parse.Query("Like");
likeQuery.equalTo("post", request.object);
[].push.apply(objectsToDelete, comments); // ***
return likeQuery.find({
useMasterKey: true
});
}).then(function(likes) {
[].push.apply(objectsToDelete, likes); // ***
return Parse.Object.destroyAll(objectsToDelete, {
useMasterKey: true
});
}).then(function(success) {
或者,只需在destroyAll调用中使用[].concat.apply([], objectsToDelete)
进行一次更改 - 即
return Parse.Object.destroyAll([].concat.apply([], objectsToDelete), {