Разбор кода кода задержки каждого итератора цикла for
Мне нужно запустить функцию в списке ParseObjects, но так как моя функция progressTournament является асинхронной:
A: Отменяет любые существующие вызовы progressTournament.
B: Возвращает status.success преждевременно.
Насколько я понимаю, мне нужно, чтобы progressTournament возвращал обещание и каким-то образом откладывал мой код до тех пор, пока это обещание не будет выполнено, однако мое понимание обещаний слишком ограничено, чтобы понять, как его реализовать.
Я был бы очень признателен за помощь в этом, надеюсь скоро услышать от кого-нибудь.
Фоновый код работы
Parse.Cloud.job('progressTournaments', function(request, status)
{
var tournamentsQuery = new Parse.Query('Tournament');
tournamentsQuery.lessThan('nextRoundTime', moment().toDate());
console.log('Finding tournaments that are due to progress...');
tournamentsQuery.find(
{
success: function(results)
{
console.log('Progressing ' + results.length + 'tournaments')
for (var i = 0; i < results.length; i++)
{
progressTournament(results[i], null);
// Wait here until progressTournament finishes!
}
status.success();
},
error: function(error)
{
status.error();
}
});
});
1 ответ
Был в состоянии достичь того, что я хотел, используя Parse.Promise.when()
tournamentsQuery.find(
function(tournaments)
{
var promises = [];
for (var i = 0; i < tournaments.length; i++)
promises.push(tournamentUtils.progressTournament(tournaments[i]));
return Parse.Promise.when(promises);
}).then(
function(progressedTournaments)
{
response.success("All tournaments progressed");
},
function(error)
{
response.error(error);
});
Если они должны быть выполнены последовательно, а не параллельно, можно использовать вместо этого Parse.Query.each()
Следует заметить, что теперь используется ответ вместо статуса, поскольку перенесен на самодостаточный сервер синтаксического анализа, поскольку этот вопрос был опубликован.