Parse.com Cloud-Code - AfterSave wird zweimal ausgeführt

Ich habe einige AfterSave-Code auf parse.com und es läufterschein Sie werden es zweimal ausführen.

Hier ist der Cloud-Code:

Parse.Cloud.afterSave("Review", function(request) {
    var query = new Parse.Query("ReviewAverage");
    query.equalTo("vendor", request.object.get("vendor"));
    query.find({ 
        success: function(average) {
            if ( average.length === 1 ){
                average = average[0];
                average.increment( "numReviews" );
                var currentTotal = average.get("totalScore") + request.object.get("rating");
                var currentAverage = currentTotal / average.get("numReviews");
                average.set("totalScore",  currentTotal ) ;
                average.set("averageScore", currentAverage) ;
                average.save();
            } else {
                var average = new Parse.Object("ReviewAverage");
                average.set("vendor", request.object.get("vendor"));
                average.set("numReviews", 1);
                average.set("totalScore", request.object.get("rating"));
                average.set("averageScore", request.object.get("rating"));
                average.save();
            }
        },
        error: function(e){
            console.error("Error updating averages: " + e);
        }
    });
});

Ich habe meine Überprüfungstabelle und anstatt sofort Überprüfungsdurchschnitte für dasselbe Element zu berechnen (da die Analyse die Funktion "Gruppieren nach Typ" nicht unterstützt), habe ich eine andere Tabelle, in der nur der laufende Durchschnitt für ein Element aufgezeichnet wird (eingegeben von) Verkäufer)

Ich habe einige Abweichungen zwischen den numReviews für einen bestimmten Anbieter in der ReviewAverage-Spalte und der tatsächlichen Anzahl der Reviews festgestellt, die für dasselbe Vendo existieren.

In den Protokollen sehe ich Dinge wie die folgenden:

I2014-11-14T08:08:45.818Z] v13: after_save triggered for Review for user dA73DS733H
  Input: {"author":{"className":"_User","objectId":"dA73DS733H","__type":"Pointer"},"createdAt":"2014-11-14T08:08:45.815Z","objectId":"j1wfWfQabv","rating":7,"review":"Lacking pigs in blankets and would have benefitted from more crunchy stuffing but otherwise good - the healthy Christmas option.","updatedAt":"2014-11-14T08:08:45.815Z","vendor":"Pret - Christmas veggie lunch","ACL":{"dA73DS733H":{"read":true,"write":true},"*":{"read":true}}}
  Result: Success
I2014-11-14T08:08:46.278Z] v13: after_save triggered for Review for user dA73DS733H
  Input: {"author":{"__type":"Pointer","className":"_User","objectId":"dA73DS733H"},"rating":7,"review":"Lacking pigs in blankets and would have benefitted from more crunchy stuffing but otherwise good - the healthy Christmas option.","vendor":"Pret - Christmas veggie lunch","createdAt":"2014-11-14T08:08:45.815Z","updatedAt":"2014-11-14T08:08:46.260Z","objectId":"j1wfWfQabv","ACL":{"*":{"read":true},"dA73DS733H":{"read":true,"write":true}}}
  Result: Success

Ich habe einige Leute gesehen, die Probleme hatten, weil sie in der AfterSave-Funktion erneut gespeichert haben - aber meine Speicherung bezieht sich immer nur auf das ReviewAverage-Objekt. Sollte es also keinen Grund geben, erneut zu triggern?

Habe ich etwas vermisst?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage