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); 
});

这将在一秒钟后启动第一项的代码,两秒钟后启动第二项的代码,依此类推。

或使用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 回答