Облачный код Parse.com - после сохранения работает дважды
У меня есть какой-то код afterSave, запущенный на parse.com, и онпоявляется ты будешь управлять этим дважды.
Вот код облака:
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);
}
});
});
У меня есть таблица отзывов, а также, вместо того, чтобы вычислять средние значения обзора для одного и того же элемента на лету (так как синтаксический анализ не поддерживает группирование по типу), у меня есть другая таблица, которая просто отслеживает скользящее среднее для элемента (с ключом поставщика ).
Я заметил некоторые расхождения между numReviews для данного поставщика в столбце ReviewAverage и фактическим количеством Отзывов, существующих для одного и того же вендора.
Просматривая в журналах, я вижу такие вещи, как:
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
Я видел некоторых людей, имеющих проблемы, потому что они повторно сохраняют в функции afterSave - но мое сохранение всегда только для объекта ReviewAverage, поэтому не должно быть никакой причины для повторного запуска?
Я что-то пропустил?