function ProcessArray(data,handler,callback){
var maxtime = 100;
var delay = 20;
var queue = data.concat();
maxtime表示每个处理进程的最大毫秒数。delay表示每个程序块之间的毫秒数。queue是源数据的复制,虽然不是在所有情景下都必要,但是我们是通过传递引用修改的,所以最好还是备份一下。
setTimeout(function(){
var endtime = new Date() + maxtime;
do{
hanler(queue.shift());
}while(queue.length>0 && endtime > new Date());
首先,先计算endtime,这是程序处理的最大时间。do.while 循环用来处理每一个小块的数据,直到循环全部完成或者超时。
if (queue.length > 0) {
setTimeout(arguments.callee, delay);
}
else {
if (callback) callback();
}
}, delay);
}
// process an individual data item
function Process(dataitem) {
console.log(dataitem);
}
// processing is complete
function Done() {
console.log("Done");
}
// test data
var data = [];
for (var i = 0; i < 500; i++) data[i] = i;
// process all items
ProcessArray(data, Process, Done);
这个方法在任何浏览器中都可以执行,不过HTML5提供了更好的办法,Rockux在以后的文章中会提到。(