解析云代码延迟 for 循环的每次迭代
Parse cloud code delay each iteraton of for loop
我需要 运行 ParseObjects 列表上的一个函数,但由于我的 progressTournament 函数是异步的,所以它:
A:取消对 progressTournament 的任何现有调用。
B: Returns status.success 过早.
我的理解是我需要 progressTournament return 一个承诺,并以某种方式延迟我的代码,直到该承诺得到解决,但是我对承诺的理解太有限,无法弄清楚如何实现它。
我非常感谢对此提供帮助,希望能尽快收到回复。
后台作业代码
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();
}
});
});
能够使用 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() 代替
应该注意,自从发布此问题后迁移到自托管解析服务器后,现在使用响应而不是状态。
我需要 运行 ParseObjects 列表上的一个函数,但由于我的 progressTournament 函数是异步的,所以它:
A:取消对 progressTournament 的任何现有调用。
B: Returns status.success 过早.
我的理解是我需要 progressTournament return 一个承诺,并以某种方式延迟我的代码,直到该承诺得到解决,但是我对承诺的理解太有限,无法弄清楚如何实现它。
我非常感谢对此提供帮助,希望能尽快收到回复。
后台作业代码
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();
}
});
});
能够使用 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() 代替
应该注意,自从发布此问题后迁移到自托管解析服务器后,现在使用响应而不是状态。