Javascript “什么会导致?”;“请求超时”;在parse.com云代码计数中?
我的云功能之一就是偶尔超时。虽然类中只有大约700个对象,但它似乎在计数方面有困难。如果您能提供有关如何调试此问题的任何提示,我将不胜感激 云功能在大多数情况下都能正常工作 记录的错误示例: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
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);
}
});
}
});
});