2017-01-24 76 views
0

問題: 使用解析雲代碼的afterDelete觸發器級聯刪除不同Parse類中的多個對象。例如,在用戶刪除帖子後,我還想刪除與該帖子關聯的評論和喜歡。 讓我們說,在解析我有一個職位,評論,和類。解析服務器雲代碼:級聯刪除多個類中的對象

我覺得我的代碼的問題(一個或多個)是關係到一個或兩個以下: 1.使用{useMasterKey:真正}在適當的地方 2.傳遞相關的評論結果相關喜歡結果在下面然後承諾塊所以通過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(最新) 操作系統:iOS的使用雨燕 服務器託管在Heroku

任何思考什麼可能是(客戶端)問題在這裏?謝謝!

回答

1
根據文檔

Parse.Object.destroyAll接受對象的數組,像

Parse.Object.destroyAll([object1, object2, object3]) 

BUT,我假定commentslikes是對象的陣列,所以要調用它

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), {