首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让setInterval根据数组执行某个动作一定的次数

让setInterval根据数组执行某个动作一定的次数
EN

Stack Overflow用户
提问于 2013-04-30 20:37:13
回答 4查看 112关注 0票数 0

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

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

下面只是我正在做的一个例子,而不是实际的代码,它是CPU密集型的。

我如何修复代码,以使它将迭代到最后,而不考虑CPU性能?

代码语言:javascript
复制
var blah = ['a','b','c'];
i=0;

int = setInterval(function(){   
    console.log(blah[i]);
    i++;
},10);

timeout = setTimeout(function(){
    clearInterval(int);
}, blah.length * 10);
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-04-30 20:42:58

使用这个

代码语言:javascript
复制
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/

票数 2
EN

Stack Overflow用户

发布于 2013-04-30 20:43:49

我会用一些类似的东西

代码语言:javascript
复制
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);

附言:我放了一个ms,因为10ms对我来说很好。

票数 1
EN

Stack Overflow用户

发布于 2013-04-30 20:54:27

我会这样解决这个问题:

代码语言:javascript
复制
var blah = ['a','b','c'];

function iterate(index) {
    console.log(blah[index]);
    if(index < blah.length - 1) {
        setTimeout(function() {iterate(++index)}, 10);
    }
}

iterate(0);

这样,您就不必处理清除超时的问题,也就没有带有闭包捕获问题的全局索引变量了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16300098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档