Можно присоединится?,
сейчас в голову велосипед приехал:
var chain = function () {};
chain.prototype.deferred = [];
chain.prototype.add = function (fn) {
this.deferred.push(fn);
return this;
}
chain.prototype.next = function () {
if (this.deferred.length) {
this.deferred.shift().apply(this);
}
}
chain.prototype.start = function () {
this.deferred.shift().apply(this);
}
new chain().
add(function(){
var self = this;
setTimeout(function () {
console.log(1);
self.next();
}, 1000);
}).
add( function(){
var self = this;
setTimeout(function () {
console.log(2);
self.next();
}, 1000);
}).
add( function(){
console.log(3);
}).
start();