0

javascriptループで同期を強制するにはどうすればよいですか?

これは同期なしです:

$.each(data, function(index, value) { 
  alert(index + ': ' + value); 
});

同期の試み:

var time = 500;
$.each(data, function(index, value) { 
  setTimeout(alert(index + ': ' + value), time);
  time += 500;
});

しかし、これまでのところ、アラートを間隔なしで連続して実行するだけです


これは、 QUEUE で実行する必要がある ajax リクエストです。

        $.each(data, function(key, val) {

            $.ajax({      
            url: 'ajax/getPerson.php', 
            type:'post',
            dataType: 'json',
            data: { 'dude' : val["idG"] },
            success: function(data) { createHTML.person(data) }
        }
4

3 に答える 3

2

これを試して:

var time = 500;
$.each(data, function(index, value) { 
  setTimeout(function() {
     alert(index + ': ' + value);
  }, time);
  time += 500;
});
于 2012-10-21T13:30:10.250 に答える
1

次のように、オブジェクトで実行するコードをfunction()最初の引数としてに渡しますsetTimeout()

var time = 500;
$.each(data, function(index, value) { 
  setTimeout(function() { alert(index + ': ' + value) }, time);
  time += 500;
});
于 2012-10-21T13:30:22.420 に答える
1

あなたのコメントによると:

この関数を使用してデータベース リクエストを作成していますが、要求した順序で返されません。

コールバック メソッドは直感的で実装が比較的簡単ですが、100 件のリクエストが必要な場合はどうでしょうか。応答時間あたり 200 ミリ秒と仮定すると、合計 20 秒になります。

ここで質問があります。AJAX 呼び出しの戻り順序を本当に気にしますか?それとも、起動した呼び出しの順序で戻りデータを処理する必要があるだけですか?

答えが後者の場合、解決策は次のようになります。

  1. すべての ajax 呼び出しを一度に (またはキューで) 起動します
  2. 返されるデータの配列を維持する
  3. すべてのリクエストが正常に返されたかどうか配列をチェックし、エラー (または他のエラー処理メカニズム) がある場合は再リクエストします
  4. すべてのリクエストが返されたら、最初に意図したデータ処理を行います
于 2012-10-21T14:57:56.450 に答える