2017-01-24 3 views
0

Problem: Verwenden des AfterDelete-Triggers von Parse Cloud Code zum Kaskadieren mehrerer Objekte aus verschiedenen Parse-Klassen. Wenn ein Benutzer beispielsweise einen Beitrag löscht, möchte ich auch Kommentare UND Likes löschen, die diesem Beitrag zugeordnet sind. Sagen wir in Parse habe ich eine Post, Comment und Like-Klasse.Server-Cloud-Code parsen

Ich denke, die Frage (n) mit meinem Code bezieht sich auf eine oder beide der folgenden Optionen: 1. Mit {useMasterKey: true} an den entsprechenden Stellen 2. Vorbei die zugehörigen Kommentare Ergebnisse zu den zugehörigen Gleichen Ergebnisse im folgenden dann versprechen Block, um sie zusammen zu löschen via destroyAll() Ich habe die vorhandenen Parse-Server Github Probleme durchsucht und StackOverflow, Foren versucht, aber nichts gefunden, um zu helfen, dies zu lösen.

Schritte zum Reproduzieren:

Hier ist der Code, den ich geschrieben habe (nicht funktioniert):

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); 
    }); 

}); 

Erwartete Ergebnisse Nach einem Benutzer einen Beitrag löscht, sollte es auch die löschen Kommentare und Likes, die mit diesem Beitrag verknüpft sind.

Tatsächliches Ergebnis Keiner der Kommentare oder Likes, die mit dem Beitrag verknüpft sind, wurde gelöscht.

Konfiguration der Umgebung

Parse-Server-Version: 2.3.2 (spätestens) Betriebssystem: iOS (Client) mit Swift Server Hosted on Heroku

keine Gedanken darüber, was das sein kann Frage hier? Vielen Dank!

Antwort

1

nach Dokumentation nimmt Parse.Object.destroyAll ein Array von Objekten, wie

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

ABER, ich gehe davon aus comments und likes Arrays von Objekten sind, so dass Sie es nennend

Parse.Object.destroyAll([[comment1, comment2, ...], [like1, like2, ...]]) 

Also, eine schnelle Lösung, verwenden Sie [].push.apply(objectsToDelete, array of objects) wie so

}).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) { 

alternativ nur eine einzige Änderung vornehmen, [].concat.apply([], objectsToDelete) im destroyAll-Aufruf - das heißt

return Parse.Object.destroyAll([].concat.apply([], objectsToDelete), {