-2

これLOOPは Parse.com サーバーにクエリを実行し、結果があれば再生します。問題は、nArrayが 100 より大きい場合、関数が Parse.com CloudCode のクエリ/バースト制限を超えて失敗することです。

LOOP1 つのアイデアは、 100 ごとに 1 秒遅らせること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 をサポートしない理由は、それが災害を招くからです。時間がかかりすぎると Cloud Code が終了するため、遅延を追加すると、完了前にコードが終了する可能性が高くなります。

Parse.com にバースト制限がある理由は、これが通常「あなたのやり方が間違っている (tm)」ことを示唆しているためです。あなたの場合、配列をループして、配列内の各項目に対してクエリを実行しています。代わりに、containedInメソッドを使用して、配列のすべてのレコードを一度に取得する必要があります。配列に 100 を超えるアイテムを取得している場合は、レコード制限を 1000 に増やすことを選択できますが、これが本当に必要かどうかを最初に慎重に検討してください。

多くのオブジェクトを変更してそれらをすべて保存する場合は、saveAllメソッドを使用してそれらすべてを 1 回のヒットで保存することも検討してください。

これらの操作をバッチ処理することを検討することもできますが、Cloud Code の全体的な期間の制限に注意してください。

于 2013-11-10T22:33:54.190 に答える