Jam*_*LCQ 5 javascript parse-platform
我有以下功能,我用它来确定记分板中的用户排名.
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);
},
Run Code Online (Sandbox Code Playgroud)
.........
但是,如果有超过1000个符合该条件的条目,则不会给出准确的响应.我想将一组.find方法链接在一起,然后我可以执行.count.有谁知道我怎么能做到这一点?如果你能提供一个很棒的代码示例!
非常感谢,詹姆斯
以下答案适用于Cloud Code,因为它通过在连续调用getUserGlobalRank()时使用函数参数来跟踪计数.我成功地在类似的情况下使用了这种架构.
正如Gene Z. Ragan在评论中提到的那样,当前接受的答案在Cloud Code中不起作用,因为没有"窗口"对象.
将递归卸载到常规Javascript函数的原因是因为Parse对云代码函数的递归限制非常低(我已经验证>对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);
}
});
}
Run Code Online (Sandbox Code Playgroud)
Parse.Query.count() 不受 Parse.com 1000 查询限制的影响。
因此,无论查询匹配多少条目,您都会得到正确的计数。
例如:
var userQ = new Parse.Query('_User');
userQ.count({success:function(count){console.log(count)}});
> 1512
var userQ = new Parse.Query('_User');
userQ.limit(100);
userQ.count({success:function(count){console.log(count)}});
> 1512
Run Code Online (Sandbox Code Playgroud)
奖励积分 -.limit()采用数字作为参数,而不是代码中的字符串。
https://www.parse.com/docs/js/symbols/Parse.Query.html#limit
哈
| 归档时间: |
|
| 查看次数: |
7095 次 |
| 最近记录: |