Я пишу работу, которую я хочу запускать каждый час в фоновом режиме на Parse. В моей базе данных есть две таблицы. Первый содержит список Question
s, а во втором перечислены все пары user \ question agreement (QuestionAgreement
s). Первоначально мой план состоял в том, чтобы клиент сам подсчитал QuestionAgreement
, но я обнаружил, что это приводит к множеству запросов, которые действительно могут быть устранены, поэтому я хочу, чтобы это фоновое задание выполняло подсчет, а затем обновляло поле непосредственно на Question
с ним.Кодирование парсера-кода досрочно?
Вот моя попытка:
Parse.Cloud.job("updateQuestionAgreementCounts", function(request, status) {
Parse.Cloud.useMasterKey();
var query = new Parse.Query("Question");
query.each(function(question) {
var agreementQuery = new Parse.Query("QuestionAgreement");
agreementQuery.equalTo("question", question);
agreementQuery.count({
success: function(count) {
question.set("agreementCount", count);
question.save(null, null);
}
});
}).then(function() {
status.success("Finished updating Question Agreement Counts.");
}, function(error) {
status.error("Failed to update Question Agreement Counts.")
});
});
Проблема заключается в том, это только кажется, работает на несколько Question
с, а затем он останавливается, появляется в разделе Статус работы на Разбор Dashboard как " удалось». Я подозреваю, что проблема в том, что она возвращается преждевременно. Вот мои вопросы:
1 - Как я могу удержать это от преждевременного возвращения? (Предполагая, что это, по сути, моя проблема.)
2 - Каков наилучший способ отладки кода облака? Поскольку это не клиентская сторона, у меня нет способа установить точки останова или что-то еще, не так ли?
Отлично, спасибо! Я рассмотрю это, а затем приму ваш ответ, увидев, что он работает сегодня вечером. – ArtOfWarfare
Ваш ответ дал мне полезный старт, так что я сделаю +1, но было слишком много кусков, отсутствующих для него, чтобы отметить его как принятое. – ArtOfWarfare
Хорошо, что вы выяснили, что вам нужен массив для параллельных обещаний. без параллельных promoises, вы также можете вернуть 'agreementQuery.count(). then (function() {})' inside 'query.each', поскольку документы говорят, что итерация не будет продолжаться до тех пор, пока это обещание не будет выполнено – knshn