4

たとえば、数秒間スリープしたいforループがあります。

$.each(para.res, function (index, item) {
    Sleep(100);
});

setTimeoutまたはsetIntervalを使用できることはわかっていますが、どちらも非同期であり、ループは続行されます。このようにすると、setTimeoutの関数だけが数秒で実行されます。

$.each(para.res, function (index, item) {
    setTimeOut(function(){do something},1000); 
});
4

2 に答える 2

2

関数を定義できます。

var i = 0;    
function recursive() {
  setTimeout(function(){
     var item = para.res[i];
     // do something
     i++;        
     if (i < para.res.length) recursive()
  }, 100)
}
于 2012-09-01T19:25:20.263 に答える
1

いいえ、そのための組み込みメソッドはありません。ビジーループを使用することもできますが、その間にブラウザがフリーズし、ブラウザがスクリプトを停止するため、長時間実行することはできません。

さまざまなコードを時間の経過とともに分散させたい場合は、次の時間にさまざまな時間を設定しsetTimeoutます。

$.each(para.res, function (index, item) {
  setTimeOut(function(){do something},1000 * index); 
});

これにより、1秒後に最初のアイテムのコードが開始され、2秒後に2番目のアイテムのコードが開始されます。

または使用setInterval

var index = 0, timer = setInterval(function(){
  if (index < para.res.length) {
    var item = para.res[index];
    // do something
    index++;
  } else {
    clearInterval(timer);
  }
}, 1000);
于 2012-09-01T19:18:25.293 に答える