blob: bc5c4c5c782e33bd649b9128abff01cc963eebfb [file] [log] [blame]
dojo.provide("dojo.Deferred");
dojo.require("dojo.lang.func");
dojo.Deferred=function(_1){
this.chain=[];
this.id=this._nextId();
this.fired=-1;
this.paused=0;
this.results=[null,null];
this.canceller=_1;
this.silentlyCancelled=false;
};
dojo.lang.extend(dojo.Deferred,{getFunctionFromArgs:function(){
var a=arguments;
if((a[0])&&(!a[1])){
if(dojo.lang.isFunction(a[0])){
return a[0];
}else{
if(dojo.lang.isString(a[0])){
return dj_global[a[0]];
}
}
}else{
if((a[0])&&(a[1])){
return dojo.lang.hitch(a[0],a[1]);
}
}
return null;
},makeCalled:function(){
var _3=new dojo.Deferred();
_3.callback();
return _3;
},repr:function(){
var _4;
if(this.fired==-1){
_4="unfired";
}else{
if(this.fired==0){
_4="success";
}else{
_4="error";
}
}
return "Deferred("+this.id+", "+_4+")";
},toString:dojo.lang.forward("repr"),_nextId:(function(){
var n=1;
return function(){
return n++;
};
})(),cancel:function(){
if(this.fired==-1){
if(this.canceller){
this.canceller(this);
}else{
this.silentlyCancelled=true;
}
if(this.fired==-1){
this.errback(new Error(this.repr()));
}
}else{
if((this.fired==0)&&(this.results[0] instanceof dojo.Deferred)){
this.results[0].cancel();
}
}
},_pause:function(){
this.paused++;
},_unpause:function(){
this.paused--;
if((this.paused==0)&&(this.fired>=0)){
this._fire();
}
},_continue:function(_6){
this._resback(_6);
this._unpause();
},_resback:function(_7){
this.fired=((_7 instanceof Error)?1:0);
this.results[this.fired]=_7;
this._fire();
},_check:function(){
if(this.fired!=-1){
if(!this.silentlyCancelled){
dojo.raise("already called!");
}
this.silentlyCancelled=false;
return;
}
},callback:function(_8){
this._check();
this._resback(_8);
},errback:function(_9){
this._check();
if(!(_9 instanceof Error)){
_9=new Error(_9);
}
this._resback(_9);
},addBoth:function(cb,_b){
var _c=this.getFunctionFromArgs(cb,_b);
if(arguments.length>2){
_c=dojo.lang.curryArguments(null,_c,arguments,2);
}
return this.addCallbacks(_c,_c);
},addCallback:function(cb,_e){
var _f=this.getFunctionFromArgs(cb,_e);
if(arguments.length>2){
_f=dojo.lang.curryArguments(null,_f,arguments,2);
}
return this.addCallbacks(_f,null);
},addErrback:function(cb,_11){
var _12=this.getFunctionFromArgs(cb,_11);
if(arguments.length>2){
_12=dojo.lang.curryArguments(null,_12,arguments,2);
}
return this.addCallbacks(null,_12);
return this.addCallbacks(null,_11);
},addCallbacks:function(cb,eb){
this.chain.push([cb,eb]);
if(this.fired>=0){
this._fire();
}
return this;
},_fire:function(){
var _15=this.chain;
var _16=this.fired;
var res=this.results[_16];
var _18=this;
var cb=null;
while(_15.length>0&&this.paused==0){
var _1a=_15.shift();
var f=_1a[_16];
if(f==null){
continue;
}
try{
res=f(res);
_16=((res instanceof Error)?1:0);
if(res instanceof dojo.Deferred){
cb=function(res){
_18._continue(res);
};
this._pause();
}
}
catch(err){
_16=1;
res=err;
}
}
this.fired=_16;
this.results[_16]=res;
if((cb)&&(this.paused)){
res.addBoth(cb);
}
}});