Async without the need for promises
AsyncBatch = function(context) {
var items = [],
asycnCount = 0,
onComplete,
ctx = context || window;
this.add = function(fn, params) {
items.push({
fn: fn,
params: params
});
}
this.run = function(callback) {
onComplete = callback;
for (var i in items) {
items[i].fn.apply(this, items[i].params);
}
}
this.done = function() {
if ( ++asycnCount >= items.length ) {
onComplete();
}
}
}