Искал долго (может не там искал...), но так и не удалось найти чистый исходный код Deferred. Смотрел в jquery - ниче не понял. На основе прочитанного вот набросал:
function Deferred(){
var self = this;
var doneList = [];
var failList = [];
var condition = 0;
function add(func, list){
list.push(func);
switch(condition){
case -1:
run(failList);
break;
case 1:
run(doneList);
}
}
function run(list){
while(list.length > 0){
list.shift()();
}
}
this.done = function(f){
add(f, doneList);
return this;
};
this.fail = function(f){
add(f, failList);
return this;
};
this.resolve = function(){
condition = 1;
run(doneList);
return this;
};
this.reject = function(){
condition = -1;
run(failList);
return this;
};
this.state = function(){
return condition;
};
/*** TMP ***/
this.getDone = function(){
return doneList;
};
}
Примерно оно?