]>
Commit | Line | Data |
---|---|---|
2f01fe57 AD |
1 | /* |
2 | Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. | |
3 | Available via Academic Free License >= 2.1 OR the modified BSD license. | |
4 | see: http://dojotoolkit.org/license for details | |
5 | */ | |
6 | ||
7 | ||
8 | if(!dojo._hasResource["dojo._base.Deferred"]){ | |
9 | dojo._hasResource["dojo._base.Deferred"]=true; | |
10 | dojo.provide("dojo._base.Deferred"); | |
11 | dojo.require("dojo._base.lang"); | |
12 | (function(){ | |
13 | var _1=function(){ | |
14 | }; | |
15 | var _2=Object.freeze||function(){ | |
16 | }; | |
17 | dojo.Deferred=function(_3){ | |
18 | var _4,_5,_6,_7,_8; | |
19 | var _9=this.promise={}; | |
20 | function _a(_b){ | |
21 | if(_5){ | |
22 | throw new Error("This deferred has already been resolved"); | |
23 | } | |
24 | _4=_b; | |
25 | _5=true; | |
26 | _c(); | |
27 | }; | |
28 | function _c(){ | |
29 | var _d; | |
30 | while(!_d&&_8){ | |
31 | var _e=_8; | |
32 | _8=_8.next; | |
33 | if(_d=(_e.progress==_1)){ | |
34 | _5=false; | |
35 | } | |
36 | var _f=(_6?_e.error:_e.resolved); | |
37 | if(_f){ | |
38 | try{ | |
39 | var _10=_f(_4); | |
40 | if(_10&&typeof _10.then==="function"){ | |
41 | _10.then(dojo.hitch(_e.deferred,"resolve"),dojo.hitch(_e.deferred,"reject")); | |
42 | continue; | |
43 | } | |
44 | var _11=_d&&_10===undefined; | |
45 | _e.deferred[_11&&_6?"reject":"resolve"](_11?_4:_10); | |
46 | } | |
47 | catch(e){ | |
48 | _e.deferred.reject(e); | |
49 | } | |
50 | }else{ | |
51 | if(_6){ | |
52 | _e.deferred.reject(_4); | |
53 | }else{ | |
54 | _e.deferred.resolve(_4); | |
55 | } | |
56 | } | |
57 | } | |
58 | }; | |
59 | this.resolve=this.callback=function(_12){ | |
60 | this.fired=0; | |
61 | this.results=[_12,null]; | |
62 | _a(_12); | |
63 | }; | |
64 | this.reject=this.errback=function(_13){ | |
65 | _6=true; | |
66 | this.fired=1; | |
67 | _a(_13); | |
68 | this.results=[null,_13]; | |
69 | if(!_13||_13.log!==false){ | |
70 | (dojo.config.deferredOnError||function(x){ | |
71 | console.error(x); | |
72 | })(_13); | |
73 | } | |
74 | }; | |
75 | this.progress=function(_14){ | |
76 | var _15=_8; | |
77 | while(_15){ | |
78 | var _16=_15.progress; | |
79 | _16&&_16(_14); | |
80 | _15=_15.next; | |
81 | } | |
82 | }; | |
83 | this.addCallbacks=function(_17,_18){ | |
84 | this.then(_17,_18,_1); | |
85 | return this; | |
86 | }; | |
87 | this.then=_9.then=function(_19,_1a,_1b){ | |
88 | var _1c=_1b==_1?this:new dojo.Deferred(_9.cancel); | |
89 | var _1d={resolved:_19,error:_1a,progress:_1b,deferred:_1c}; | |
90 | if(_8){ | |
91 | _7=_7.next=_1d; | |
92 | }else{ | |
93 | _8=_7=_1d; | |
94 | } | |
95 | if(_5){ | |
96 | _c(); | |
97 | } | |
98 | return _1c.promise; | |
99 | }; | |
100 | var _1e=this; | |
101 | this.cancel=_9.cancel=function(){ | |
102 | if(!_5){ | |
103 | var _1f=_3&&_3(_1e); | |
104 | if(!_5){ | |
105 | if(!(_1f instanceof Error)){ | |
106 | _1f=new Error(_1f); | |
107 | } | |
108 | _1f.log=false; | |
109 | _1e.reject(_1f); | |
110 | } | |
111 | } | |
112 | }; | |
113 | _2(_9); | |
114 | }; | |
115 | dojo.extend(dojo.Deferred,{addCallback:function(_20){ | |
116 | return this.addCallbacks(dojo.hitch.apply(dojo,arguments)); | |
117 | },addErrback:function(_21){ | |
118 | return this.addCallbacks(null,dojo.hitch.apply(dojo,arguments)); | |
119 | },addBoth:function(_22){ | |
120 | var _23=dojo.hitch.apply(dojo,arguments); | |
121 | return this.addCallbacks(_23,_23); | |
122 | },fired:-1}); | |
123 | })(); | |
124 | dojo.when=function(_24,_25,_26,_27){ | |
125 | if(_24&&typeof _24.then==="function"){ | |
126 | return _24.then(_25,_26,_27); | |
127 | } | |
128 | return _25(_24); | |
129 | }; | |
130 | } |