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();
});