Асинхронная обработка массивов:
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);
}
processArray([1,2,3], function(element){console.log(element);}, function(){console.log('End');});
Полуасинхронно-пакетная обработка массивов:
function timedProcessArray(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);
}
timedProcessArray([1,2,3], function(element){console.log(element);}, function(){console.log('End');});
Асинхронный вызов функций из очереди:
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);
}
multistep([function(a){console.log(a);}, function(b){console.log(b);}, function(c){console.log(c);}], [1], function(){console.log('End');});
Комментариев нет:
Отправить комментарий