Function scheduler

by mmarcon

JavaScript

var Scheduler = function (sleep) {
    this.scheduledFns = [];
    this.sleep = sleep;
    var that = this;
    
    this.schedule = function (fn) {
        if ($.isFunction(fn)) {
            this.scheduledFns.push (fn);
        }
        else {
            throw new Error(fn + ' is not a function');
        }
    };
    
    this.next = function() {
        var nextFn;
        if (that.scheduledFns.length > 0) {
             nextFn = that.scheduledFns.shift();
            (that.sleep) ? setTimeout (function() {nextFn (that.next)}, that.sleep) : nextFn (that.next);
        }       
    };
    
    this.start = function() {
        var timer;
        that.sleep = that.sleep || 500;
        timer = setInterval (function(){
            var nextFn;
            if (that.scheduledFns.length > 0) {
                nextFn = that.scheduledFns.shift();
                nextFn();
            }
            else {
                clearInterval (timer);
            }
        }, that.sleep);
    };
};

var i = 0;
var testFn = function (callback) {
    $.get('/echo/json', function(res){
        console.log(res);
        document.write('#' + i++);
    });
};

$(function(){
    var s = new Scheduler(), j;
    
    for (j = 0; j < 20; j++) {
        s.schedule(function(c){testFn(c)})
    }
    
    s.start();
    
});