获取setInterval以根据数组执行一定次数的操作
Get setInterval to perform an action a certain amount of times based on array
我试图通过数组中的值迭代,通过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>
相关文章:
- Jquery表单验证插件-如果选中复选框,如何在提交时执行某些操作
- Google 脚本:用于创建日历活动的脚本运行时不会出错,但不会执行任何操作
- 当通过AJAX调用时,控制器操作不会执行
- jQuery-将列表项的一个元素移动到同一项的另一个元素中+对我的列表中的每个项执行此操作
- 点击:更改位置后执行某些操作
- 无法执行文件.退出Acrobat PDF中的操作
- 从表单中获取用户输入执行计算(操作顺序)并输出回该表单
- 如何在ListView项模板中获取按钮来执行不同的操作
- 单击元素两次后执行操作
- ReactJS只有在操作完成后才能执行某些操作
- toogleClass函数来切换元素类并在事件期间执行某些操作
- jQuery/Javascript foreach If/Else |如果为空(不执行任何操作)Else(显示forea
- Var工作,但在使用数组执行相同操作时停止
- 如何在mvc3中执行操作而不更改当前页面
- jQuery:$.ajax() 重定向到其 URL 表单操作参数,而不是对表单操作执行 AJAX 请求
- 如何为多个操作执行简单的 jQuery
- Redux 转换到操作执行后
- 反流操作执行后触发通知/回调
- jquery如果按钮点击了执行其他操作执行其他操作
- 在操作执行之前禁用锚链接