Разбор кода кода задержки каждого итератора цикла 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()

Следует заметить, что теперь используется ответ вместо статуса, поскольку перенесен на самодостаточный сервер синтаксического анализа, поскольку этот вопрос был опубликован.

Другие вопросы по тегам