function runProcess(){
var todo = items.concat();
setTimeout(function(){
process(todo.shift());
if(todo.length > 0){
setTimeout(arguments.callee, 25);
} else {
callback(items);
}
}, 25);
}
我尝试将此块重构为函数
function doWork(todo){
process(todo.shift());
if(todo.length > 0){
setTimeout(arguments.callee, 25);
} else {
callback(items);
}
}
但这次给定阵列从头开始重复
我认为问题出现在 arguments.callee 中,那么我可以使用什么而不是它呢?
最诚挚的问候
答案 0 :(得分:2)
只需为您的匿名函数命名,以便您可以按名称调用它。
function runProcess(){
var todo = items.concat();
setTimeout(function step() { // give it a name
process(todo.shift());
if(todo.length > 0){
setTimeout(step, 25); // call it by its name
} else {
callback(items);
}
}, 25);
}
答案 1 :(得分:1)
函数setInterval
应该符合您的需求。
function runProcess(){
var todo = items.concat(),
id = setInterval(function(){
process(todo.shift());
if(todo.length === 0) {
clearInterval(id);
callback(items);
}
}, 25);
}