我想分享一段代码片段(基于Soufiane Hassou的答案)。它适用于当你需要在固定时间间隔内迭代某个数组时。基本上是同步循环,但使用了“sleep”暂停(因为JavaScript不是一种同步编程语言)。
function loop(arr, take, period) {
period = period || 1000;
var i = 0;
var interval = setInterval(function() {
take(i, arr[i]);
if (++i >= arr.length) { clearInterval(interval);}
}, period);
}
使用示例:
loop([1, 2, 3, 4], function(index, elem){
console.log('arr[' + index + ']: ' + elem);
});
已在Node JS中进行测试。希望能对某些人有所帮助。
编辑>
以下更新使代码可与执行大量“原型”(如jQuery或prototype)的库一起使用:
function loop(arr, take, period) {
period = period || 1000;
var scope = {
i: 0,
arr: arr,
take: take,
};
var iterate = (function iterate() {
if (this.i >= this.arr.length) { clearInterval(this.interval); return}
take(this.i, this.arr[this.i++]);
}).bind(scope);
scope.interval = setInterval(iterate, period);
}
setInterval
。就像你之前所做的那样,它就像在setTimeout
上循环 :) - Soufiane Hassou