function processArray(items,process,callback){
var todo = items.concat();
setTimeout(function(){
process(todo.shift());
if(todo.length > 0){
setTimeout(arguments.callee,25);
} else {
callback(items);
}
},25);
}
var items = [1,2,3];
function output(value){
console.log(value);
}
processArray(items,outputValue,function(){
console.log('finished output!')
});
function multistep(steps,args,callback){
var tasks = steps.concat();
setTimeout(function(){
var task = tasks.shift();
task.apply(null,args||[]);
if(tasks.length > 0){
setTimeout(arguments.callee,25);
} else {
callback();
}
},25);
}
function saveDocument(id){
var tasks = [open,write,close];
multistep(tasks,[id],function(){
console.log('finished!');
})
}
function timeProcessArray(items,process,callback){
var todo = items.concat();
setTimeout(function(){
var start = +new Date();
do{
process(todo.shift());
}while(todo.length > 0 &&(+new Date() - start < 50)) ;
if(todo.length > 0){
setTimeout(arguments.callee,25);
} else {
callback(items);
}
},25);
}
注意,定時器雖然可以提高性能,但是過度使用會適得其反。需要控制web應用中的使用數量。