для своего велосипеда сделал диферд следующей структуры:
var d = _.deferred() - создаёт объект. в моей реализации это типо суперкласс.
d.stage('ajax') - создаёт стадию.
таких стадий может быть сколько угодно.
их можно:
d.resolve('ajax')
d.reject('ajax')
d.stage('ajax').done(function() {...}).fail(function() {...});
ещё может передаваться контекст и параметры, можно выполнять без имени, тогда завершиться следующая стадия в очереди.
если в d не осталось незавершённых стадий, он сам завершается, тут 3 варианта:
success (все стадии resolve)
err (хоть одна reject)
anyway
вроде всё...
Как задумка?
сам как написал, сел задумался: какая же х*рня. какое-то масло масляное(у меня ещё when есть). и тд и тп.
но решил оставить.
уже пару раз, с удивлением, словил себя на мысли, когда юзал его, мол "вау. так пригодилось, а я о таком даже не подумал".
но чёт до сих пор сомневаюсь...