130 lines
2.4 KiB
JavaScript
130 lines
2.4 KiB
JavaScript
/*
|
|
Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
|
|
Available via Academic Free License >= 2.1 OR the modified BSD license.
|
|
see: http://dojotoolkit.org/license for details
|
|
*/
|
|
|
|
|
|
if(!dojo._hasResource["dojo._base.Deferred"]){
|
|
dojo._hasResource["dojo._base.Deferred"]=true;
|
|
dojo.provide("dojo._base.Deferred");
|
|
dojo.require("dojo._base.lang");
|
|
(function(){
|
|
var _1=function(){
|
|
};
|
|
var _2=Object.freeze||function(){
|
|
};
|
|
dojo.Deferred=function(_3){
|
|
var _4,_5,_6,_7,_8;
|
|
var _9=this.promise={};
|
|
function _a(_b){
|
|
if(_5){
|
|
throw new Error("This deferred has already been resolved");
|
|
}
|
|
_4=_b;
|
|
_5=true;
|
|
_c();
|
|
};
|
|
function _c(){
|
|
var _d;
|
|
while(!_d&&_8){
|
|
var _e=_8;
|
|
_8=_8.next;
|
|
if(_d=(_e.progress==_1)){
|
|
_5=false;
|
|
}
|
|
var _f=(_6?_e.error:_e.resolved);
|
|
if(_f){
|
|
try{
|
|
var _10=_f(_4);
|
|
if(_10&&typeof _10.then==="function"){
|
|
_10.then(dojo.hitch(_e.deferred,"resolve"),dojo.hitch(_e.deferred,"reject"));
|
|
continue;
|
|
}
|
|
var _11=_d&&_10===undefined;
|
|
_e.deferred[_11&&_6?"reject":"resolve"](_11?_4:_10);
|
|
}
|
|
catch(e){
|
|
_e.deferred.reject(e);
|
|
}
|
|
}else{
|
|
if(_6){
|
|
_e.deferred.reject(_4);
|
|
}else{
|
|
_e.deferred.resolve(_4);
|
|
}
|
|
}
|
|
}
|
|
};
|
|
this.resolve=this.callback=function(_12){
|
|
this.fired=0;
|
|
this.results=[_12,null];
|
|
_a(_12);
|
|
};
|
|
this.reject=this.errback=function(_13){
|
|
_6=true;
|
|
this.fired=1;
|
|
_a(_13);
|
|
this.results=[null,_13];
|
|
if(!_13||_13.log!==false){
|
|
(dojo.config.deferredOnError||function(x){
|
|
console.error(x);
|
|
})(_13);
|
|
}
|
|
};
|
|
this.progress=function(_14){
|
|
var _15=_8;
|
|
while(_15){
|
|
var _16=_15.progress;
|
|
_16&&_16(_14);
|
|
_15=_15.next;
|
|
}
|
|
};
|
|
this.addCallbacks=function(_17,_18){
|
|
this.then(_17,_18,_1);
|
|
return this;
|
|
};
|
|
this.then=_9.then=function(_19,_1a,_1b){
|
|
var _1c=_1b==_1?this:new dojo.Deferred(_9.cancel);
|
|
var _1d={resolved:_19,error:_1a,progress:_1b,deferred:_1c};
|
|
if(_8){
|
|
_7=_7.next=_1d;
|
|
}else{
|
|
_8=_7=_1d;
|
|
}
|
|
if(_5){
|
|
_c();
|
|
}
|
|
return _1c.promise;
|
|
};
|
|
var _1e=this;
|
|
this.cancel=_9.cancel=function(){
|
|
if(!_5){
|
|
var _1f=_3&&_3(_1e);
|
|
if(!_5){
|
|
if(!(_1f instanceof Error)){
|
|
_1f=new Error(_1f);
|
|
}
|
|
_1f.log=false;
|
|
_1e.reject(_1f);
|
|
}
|
|
}
|
|
};
|
|
_2(_9);
|
|
};
|
|
dojo.extend(dojo.Deferred,{addCallback:function(_20){
|
|
return this.addCallbacks(dojo.hitch.apply(dojo,arguments));
|
|
},addErrback:function(_21){
|
|
return this.addCallbacks(null,dojo.hitch.apply(dojo,arguments));
|
|
},addBoth:function(_22){
|
|
var _23=dojo.hitch.apply(dojo,arguments);
|
|
return this.addCallbacks(_23,_23);
|
|
},fired:-1});
|
|
})();
|
|
dojo.when=function(_24,_25,_26,_27){
|
|
if(_24&&typeof _24.then==="function"){
|
|
return _24.then(_25,_26,_27);
|
|
}
|
|
return _25(_24);
|
|
};
|
|
}
|