我有一个存储了多个延迟的数组: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中执行其他操作。任何有关这方面的帮助将不胜感激!
答案 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);
}