asyncLopp

by Jose Montero

JavaScript

function asyncLoop(iterations, func, callback) {
    var index = 0;
    var done = false;
    var loop = {
        next: function() {
            if (done) {
                return;
            }

            if (index < iterations) {
                index++;
                func(loop);

            } else {
                done = true;
                callback();
            }
        },

        iteration: function() {
            return index - 1;
        },

        break: function() {
            done = true;
            callback();
        }
    };
    loop.next();
    return loop;
}
function someFunction(a, b, callback) {
           setTimeout(function(){
            document.write('Iteration ' +(b + (a - 1)) + ' <br>');
            loop();
        },1000);
    callback();
}

var iterations = 2;
asyncLoop(iterations, function(loop) {	
    someFunction(iterations, loop.iteration(), function(result) {

        // log the iteration
        console.log(loop.iteration());

        // Okay, for cycle could continue
        loop.next();
    })},
    function(){console.log('cycle ended')}
);