我有以下函数,我用它来确定用户在记分牌中的排名。
Parse.Cloud.define("getUserGlobalRank", function(request, response)
{
var usernameString = request.params.username;
var scoreAmount = request.params.score;
var globalRankQuery = new Parse.Query("scoreDB");
globalRankQuery.greaterThanOrEqualTo("score",scoreAmount);
globalRankQuery.descending("score");
globalRankQuery.limit("1000");
globalRankQuery.count(
{
success: function(count);
{
response.success(count);
},
…………
但是,如果满足该条件的条目超过 1000 个,则不会给出准确的响应。我想将一组 .find 方法链接在一起,随后可以对其执行 .count 。有谁知道我如何才能实现这一目标?如果您能提供一个代码示例那就太好了!
非常感谢,
詹姆士
以下答案适用于 Cloud Code,因为它通过在连续调用 getUserGlobalRank() 中使用函数参数来跟踪计数。我已经在类似的案例中成功地使用了这种架构。
正如 Gene Z. Ragan 在评论中提到的那样,当前接受的答案在 Cloud Code 中不起作用,因为没有“窗口”对象。
递归被卸载到常规 Javascript 函数的原因是因为 Parse 对 Cloud Code 函数的递归限制非常低(我已经验证对 Cloud Code 函数的 >4 次递归调用将导致错误)。通过在 Javascript 函数中实现递归,您可以绕过 Parse 的递归限制,只要代码在允许的时间(大约 15 秒)内执行,就可以继续进行递归调用。
Parse.Cloud.define('getUserGlobalRank', function(request, response) {
getUserGlobalRank({'username':request.params.username, 'score':request.params.score}, {
success: function(count) {
response.success(count);
},
error: function(error) {
response.error(error);
}
});
});
function getUserGlobalRank(request, response) {
var usernameString = request['username'];
var scoreAmount = request['score'];
var count = (request['count'])? request['count'] : 0;
var globalRankQuery = new Parse.Query("scoreDB");
globalRankQuery.greaterThanOrEqualTo("score", scoreAmount);
globalRankQuery.descending("score");
globalRankQuery.limit(1000);
globalRankQuery.skip(count);
globalRankQuery.find({
success: function(results) {
if (results.length > 0) {
count = count + results.length;
getUserGlobalRank({'count':count, 'username':usernameString, 'score':scoreAmount}, response);
}
else { // found count of users with higher ranks
response.success(count);
}
},
error: function(error) { // query error
response.error(error);
}
});
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)