我需要在ParseObjects列表上运行一个函数,但由于我的progressTournament函数是异步的,所以:
答:取消对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();
}
});
});
答案 0 :(得分:0)
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()代替
应该注意,自从此问题发布以来,现在使用响应而不是状态迁移到自托管解析服务器。