2016-03-23 4 views
0

Ich brauche eine Funktion auf eine Liste von ParseObjects, aber da meine progressTournament Funktion laufen asynchron es:Parse Cloud-Code Verzögerung jeder iteraton der for-Schleife

A: Bricht alle vorhandenen Anrufe progressTournament.
B: Gibt status.success vorzeitig zurück.

Mein Verständnis ist, dass ich Fortschritt haben mussTurnament ein Versprechen zurückgeben und irgendwie meinen Code verzögern, bis dieses Versprechen gelöst ist, jedoch ist mein Verständnis von Versprechungen zu begrenzt, um herauszufinden, wie man es implementiert.

Ich würde wirklich einige Hilfe zu diesem Thema schätzen, hoffe, bald von jemandem wieder zu hören.

Hintergrund Job Code

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

Antwort

0

War in der Lage zu erreichen, was ich mit Parse.Promise.when() wollte

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

Wenn sie in Serie getan werden musste und nicht parallel,

Parse.Query.each() stattdessen verwenden könnte

Sollte beachten, dass jetzt seit migr Response statt Status verwendet mit dem selbst gehosteten Parse-Server seit der Veröffentlichung dieser Frage verbunden.