Javascript “什么会导致?”;“请求超时”;在parse.com云代码计数中?

Javascript “什么会导致?”;“请求超时”;在parse.com云代码计数中?,javascript,parse-platform,cloud,Javascript,Parse Platform,Cloud,我的云功能之一就是偶尔超时。虽然类中只有大约700个对象,但它似乎在计数方面有困难。如果您能提供有关如何调试此问题的任何提示,我将不胜感激 云功能在大多数情况下都能正常工作 记录的错误示例: E2015-02-03T02:21:41.410Z] v199: Ran cloud function GetPlayerWorldLevelRank for user xl8YjQElLO with: Input: {"levelID":60} Failed with: PlayerWorldLe

我的云功能之一就是偶尔超时。虽然类中只有大约700个对象,但它似乎在计数方面有困难。如果您能提供有关如何调试此问题的任何提示,我将不胜感激

云功能在大多数情况下都能正常工作

记录的错误示例:

E2015-02-03T02:21:41.410Z] v199: Ran cloud function GetPlayerWorldLevelRank for user xl8YjQElLO with:
  Input: {"levelID":60}
  Failed with: PlayerWorldLevelRank first count error: Request timed out
下面的代码中有什么看起来奇怪的地方吗?超时错误通常在第二次计数(query3)时抛出,但有时在第一次计数(query2)时超时


我认为问题不在你的代码中。如错误消息所述:请求超时。也就是说,解析API在超时期间没有响应,或者是网络导致它超时。一旦执行
.count
操作,可能会执行一些API调用,这些调用将无法连接或超时

显然,更多的人有这个问题:。似乎不可能增加超时时间,因此本文中的建议指出:

因此,我建议在执行 查询,并在查询返回时使其无效。如果
n计时器
在失效前激发,询问用户是否要保留 等待结果返回,或向他们显示消息 表示请求需要很长时间才能完成。这 如果用户知道其当前状态,则有机会等待更多时间 网络条件并不理想


如果你正在处理网络问题,尤其是在移动平台上,你需要为网络问题做好准备。因此,正如帖子所建议的:为用户提供重试的选项。

您是否尝试过进行一些日志记录,以查看它在何处停止?尝试记录时间和变量。没有这些,很难调试。被认为是正确的。问题很简单,它超时是因为count()花费的时间太长(即使只有700条记录)。云计算功能必须在7秒内完成。Parse不适用于排行榜,因为。
Parse.Cloud.define("GetPlayerWorldLevelRank", function(request, response) {    
    var query = new Parse.Query("LevelRecords");
    query.equalTo("owner", request.user);
    query.equalTo("levelID", request.params.levelID);
    query.first().then(function(levelRecord) {
        if (levelRecord === undefined) {
            response.success(null);
        }
        // if player has a record, work out his ranking
        else {
            var query2 = new Parse.Query("LevelRecords");
            query2.equalTo("levelID", request.params.levelID);
            query2.lessThan("timeSeconds", levelRecord.get("timeSeconds"));
            query2.count({
                success: function(countOne) {
                    var numPlayersRankedHigher = countOne;

                    var query3 = new Parse.Query("LevelRecords");
                    query3.equalTo("levelID", request.params.levelID);
                    query3.equalTo("timeSeconds", levelRecord.get("timeSeconds"));
                    query3.lessThan("bestTimeUpdatedAt", levelRecord.get("bestTimeUpdatedAt"));
                    query3.count({
                        success: function(countTwo) {
                            numPlayersRankedHigher += countTwo;
                            var playerRanking = numPlayersRankedHigher + 1;                    
                            levelRecord.set("rank", playerRanking);
                            // The SDK doesn't allow an object that has been changed to be serialized into a response.
                            // This would disable the check and allow you to return the modified object.
                            levelRecord.dirty = function() { return false; };    
                            response.success(levelRecord);    
                        },
                        error: function(error) {
                            response.error("PlayerWorldLevelRank second count error: " + error.message);
                        }                            
                    });
                },
                error: function(error) {
                    response.error("PlayerWorldLevelRank first count error: " + error.message);
                }
            });
         }
    });
});