2016-03-23 1 views
0

je dois exécuter une fonction sur une liste de ParseObjects, mais étant donné que ma fonction progressTournament est asynchrone il:Parse retard de code nuage chaque iteraton de boucle

A: annule tous les appels existants à progressTournament.
B: Retourne status.success prématurément. Si je comprends bien, j'ai besoin de progrès. Je rends une promesse et retarde mon code jusqu'à ce que cette promesse soit résolue, mais ma compréhension des promesses est trop limitée pour comprendre comment l'implémenter.

J'apprécierais vraiment de l'aide sur ceci, j'espère recevoir une réponse de quelqu'un bientôt.

Contexte Code emploi

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(); 
     } 
    }); 
}); 

Répondre

0

a été en mesure de réaliser ce que je voulais à l'aide 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); 
}); 

Si elles devaient être faites en série plutôt qu'en parallèle, pourrait utiliser Parse.Query.each() à la place

Il convient de noter qu'utiliser maintenant la réponse au lieu du statut depuis la migration Atteint au serveur d'analyse hébergé auto-hébergé depuis que cette question a été postée.