setTimeout / setInterval有多个延迟来执行代码

时间:2012-11-10 20:20:43

标签: javascript arrays settimeout delay setinterval

我有一个存储了多个延迟的数组:myArray[8000,4000,3000,6000,5000]。我需要setTimeout / setInterval来运行每个延迟,然后执行特定的代码。例如:

myArray[0]=8000;
myArray[1]=4000;
myArray[2]=3000;
myArray[3]=6000;
myArray[4]=5000;

for(var k=0;k<5;k++)
{
    setTimeout(function() {

console.log("CODE TO BE EXECUTED");

    }, diffArray[k]);
}

因此最终结果将是等待12秒运行代码,等待4秒运行代码,等待3秒运行代码等待6秒运行代码,并等待5秒并运行代码。当前代码同时运行它们。

我知道这很可能需要通过递归来完成,我已经尝试了一些事情,只要让它工作,但没有运气。我让它以一种方式工作,但不幸的是它锁定了UI线程,我需要在UI运行时在UI中执行其他操作。任何有关这方面的帮助将不胜感激!

3 个答案:

答案 0 :(得分:4)

按顺序运行setTimeout。您正在同时运行所有setTimeout。

myArray[0]=8000;
myArray[1]=4000;
myArray[2]=3000;
myArray[3]=6000;
myArray[4]=5000;
var k =0;
    function repeat(){
       if(k == myArray.length) return;
      setTimeout(function() {
              repeat();
              console.log("CODE TO BE EXECUTED");

      }, myArray[k]);
     k++;
  }

答案 1 :(得分:0)

您应该创建另一个函数,以便每次都复制k变量,因为setTimeout是异步操作:

var func = function(k)
{
  setTimeout(function() {
    console.log("CODE TO BE EXECUTED");
    }, diffArray[k]);
}

for(var k=0;k<5;k++)
{
  func(k)
}

答案 2 :(得分:0)

你提到12秒,但没有那么大的价值。如果您希望代码运行8秒,12秒,15秒,21秒和26秒,则:

var delay =0;
for(var k=0;k<5;k++){
   delay+=myArray[k];
   setTimeout(function() {
      console.log("CODE TO BE EXECUTED");
   }, delay);
}