-2

LOOP会查询 Parse.com 服务器,然后播放结果(如果有)。问题是当nArray大于 100 时,函数超过 Parse.com CloudCode 的查询/突发限制并且它失败。

一个想法是LOOP在每 100 之后延迟一秒钟LOOPS,但我不知道该怎么做。任何其他解决方案将不胜感激。

提前致谢,

 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)


 };
4

2 回答 2

1

你有几个问题要处理。

Parse.com 不支持 setInterval 的原因是因为那会招致灾难。如果花费的时间太长,它会终止您的云代码,因此让您添加延迟只会增加您的代码在完成之前终止的机会。

Parse.com 有突发限制的原因是这通常表明“你做错了(tm)”。在您的情况下,您正在遍历一个数组并为数组中的每个项目运行一个查询。相反,您应该使用containsIn方法一次性获取数组的所有记录。如果您的数组中有超过 100 个项目,您可以选择将记录限制增加到 1000,但首先要仔细考虑这是否真的是您需要的。

鉴于您正在修改大量对象并将它们全部保存,请考虑使用saveAll方法一键保存它们。

您可能需要考虑对这些操作进行批处理,但请注意Cloud Code 总体持续时间的限制。

于 2013-11-10T22:33:54.190 回答
0

您可以使用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
于 2013-11-08T16:44:47.050 回答