我在下面使用以下函数来确定用户在记分牌中的排名。
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);
}
});
}
关于javascript - Cloud Code Parse Limit 1000 通过 Chaining 克服了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13896484/