是否有任何方法在循环中的JavaScript中睡觉?

时间:2012-09-01 19:14:09

标签: javascript jquery

例如,有一个循环,我想睡几秒钟。

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

我知道我可以使用setTimeout或setInterval,但它们都是异步的,循环会继续,只要我这样做,setTimeout中的函数就会在几秒内运行。

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

2 个答案:

答案 0 :(得分:2)

您可以定义一个功能。

var i = 0;    
function recursive() {
  setTimeout(function(){
     var item = para.res[i];
     // do something
     i++;        
     if (i < para.res.length) recursive()
  }, 100)
}

答案 1 :(得分: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);