获取setInterval以根据数组执行一定次数的操作

Get setInterval to perform an action a certain amount of times based on array

本文关键字:操作 执行 setInterval 数组 获取      更新时间:2023-09-26

我试图通过数组中的值迭代,通过setInterval(),每10ms。

然而,由于计算机不能快速处理迭代,我的clearInterval()实际上是在数组被完全迭代之前清除间隔。

下面只是我正在做的一个例子,而不是实际的代码,它更占用CPU。

我如何修复代码,使它将迭代所有到结束,而不管CPU性能?

var blah = ['a','b','c'];
i=0;
int = setInterval(function(){   
    console.log(blah[i]);
    i++;
},10);
timeout = setTimeout(function(){
    clearInterval(int);
}, blah.length * 10);

使用

var blah = ['a','b','c'];
var i=0;
var intervalId = setInterval(function(){   
    console.log(blah[i]);
    i++;
    if(i==blah.length){ // i== 3 all array elements processed. then clear interval
      clearInterval(intervalId );
    }
},10);

工作示例http://jsfiddle.net/B8ya3/

我会写一些类似

的东西
var inter, 
    blah = ['a','b','c','d','e'],
    i=0;
inter = setInterval(function(){   
    console.log(blah[i]);
    i++;
    if (i === blah.length) {
        clearInterval(inter);
    }
},1);

p。S:我放了1毫秒,因为10毫秒对我来说已经很好了。

我会这样解决:

var blah = ['a','b','c'];
function iterate(index) {
    console.log(blah[index]);
    if(index < blah.length - 1) {
        setTimeout(function() {iterate(++index)}, 10);
    }
}
iterate(0);

那么您就不必处理清除超时的问题,并且您也没有全局索引变量与闭包捕获问题。

我个人不想使用setInterval来做你想做的事情。如果您的目标是限制流程,即在给定时间内只处理一次迭代,并在下一个流程交互之前添加延迟,则"setInterval"无法强制执行。它只能确保每个流程迭代以固定的间隔开始。

我是这样做的:

<script>
var items = [1, 2, 3, 4, 5];
function processOffersOneAtATime() {
    if (items.length != 0) {
        var item = items.pop();
        setTimeout(function() {
         console.log(item);
         //do time consuming cpu intensive operation here
         processOffersOneAtATime();
        }, 1000);
    }
}
//kick start the process
 processOffersOneAtATime();
 </script>