延迟这个Javascript FOR Loop
Delay this Javascript FOR Loop
此LOOP
查询 Parse.com 服务器,然后播放结果(如果有)。问题是,当nArray
大于 100 时,函数超过了 CloudCode Parse.com 查询/突发限制,并且失败。
一个想法是在每 100 LOOPS
后将LOOP
延迟一秒钟,但我不确定该怎么做。任何其他解决方案将不胜感激。
提前致谢,
for (var k = 1; k < nArray.length; k++) {
(function (k, mArray) { // <-- define an inline function
query2.equalTo("username", nArray[k]); // BURST LIMIT EXCEEDS
query2.find({
success: function (results) {
if (results.length !== 0) {
var object = results[0];
var compareUserEmail = object.get('email');
if (compareUserEmail !== userEmail) {
// alert("The result is equal to" + object.get('Name'));
mArray.push({
name: object.get('Name'),
email: object.get('email'),
bloxID: object.get('bloxID')
});
gameScore.set("filtered", mArray);
gameScore.save(null, {
success: function (gameScore) {
response.success("Success!");
alert('New object created with objectId: ' + gameScore.id);
},
error: function (gameScore, error) {
alert('Failed to create new object, with error code: ' + error.description);
}
});
}
};
},
error: function () {}
});
})(k, mArray);
// <-- call it after definition using (k)
};
你有几个问题要处理。
Parse.com 不支持setInterval的原因是因为那会招致灾难。如果花费的时间过长,它会终止您的云代码,因此让您添加延迟只会增加您的代码在完成之前终止的机会。
Parse.com 有突发限制的原因是,这通常表明"你做错了(tm)"。在您的情况下,您正在循环访问数组并为数组中的每个项目运行查询。相反,您应该使用 containedIn 方法一次性获取数组的所有记录。如果您的数组中有超过 100 个项目,您可以选择将记录限制增加到 1000,但首先要仔细考虑这是否真的是您需要的。
鉴于您要修改大量对象并将它们全部保存,请考虑使用 saveAll 方法一次性保存所有对象。
您可能需要考虑对这些操作进行批处理,但请注意对云代码总体持续时间的限制。
您可以使用
setInterval
:
var i = 0;
var intervalId = setInterval(function() {
if(i < nArray.length) {
... your code ...
i++;
} else {
clearInterval(intervalId);
}
}, 100); //every 100ms; change it to what you need
相关文章:
- jQuery setTimeOut: in for-loop
- javascript/angularjs 将 String 与 number for loop 连接起来
- JavaScript for loop
- Native/$q Javascript For Loop Promise Resolve
- Javascript / Openlayers for loop不起作用
- for loop inside another for loop javascript (jquery)
- Json "for" loop
- 如何使用$q promise同步执行FOR LOOP
- JavaScript for loop "document.getElementById"
- Javascript Generic For Loop
- JavaScript For Loop - 执行终止条件
- 在 for loop JavaScript 中添加数字
- New to Javascript - For Loop
- MongoDB For Loop更新错误的用户
- javascript for loop won't iterate
- Javascript for loop产生意想不到的结果
- for loop, Math.random() 不按预期运行
- Javascript:for loop获取数据,但顺序被破坏了
- 有一些JavaScript问题,for loop.将数字转换为其字符串值
- JavaScript for-loop:如何让我的数字转换器工作