@@ -16,12 +16,12 @@ jQuery.extend({
1616 Deferred : function ( func ) {
1717 var tuples = [
1818 // action, add listener, callbacks, .then handlers, final state
19+ [ "notify" , "progress" , jQuery . Callbacks ( "memory" ) ,
20+ jQuery . Callbacks ( "memory" ) , 2 ] ,
1921 [ "resolve" , "done" , jQuery . Callbacks ( "once memory" ) ,
20- jQuery . Callbacks ( "once memory" ) , "resolved" ] ,
22+ jQuery . Callbacks ( "once memory" ) , 0 , "resolved" ] ,
2123 [ "reject" , "fail" , jQuery . Callbacks ( "once memory" ) ,
22- jQuery . Callbacks ( "once memory" ) , "rejected" ] ,
23- [ "notify" , "progress" , jQuery . Callbacks ( "memory" ) ,
24- jQuery . Callbacks ( "memory" ) ]
24+ jQuery . Callbacks ( "once memory" ) , 1 , "rejected" ]
2525 ] ,
2626 state = "pending" ,
2727 promise = {
@@ -38,17 +38,19 @@ jQuery.extend({
3838
3939 return jQuery . Deferred ( function ( newDefer ) {
4040 jQuery . each ( tuples , function ( i , tuple ) {
41- var fn = jQuery . isFunction ( fns [ i ] ) && fns [ i ] ;
41+ // Map tuples (progress, done, fail) to arguments (done, fail, progress)
42+ var fn = jQuery . isFunction ( fns [ tuple [ 4 ] ] ) && fns [ tuple [ 4 ] ] ;
43+
44+ // deferred.progress(function() { bind to newDefer or newDefer.notify })
4245 // deferred.done(function() { bind to newDefer or newDefer.resolve })
4346 // deferred.fail(function() { bind to newDefer or newDefer.reject })
44- // deferred.progress(function() { bind to newDefer or newDefer.notify })
4547 deferred [ tuple [ 1 ] ] ( function ( ) {
4648 var returned = fn && fn . apply ( this , arguments ) ;
4749 if ( returned && jQuery . isFunction ( returned . promise ) ) {
4850 returned . promise ( )
51+ . progress ( newDefer . notify )
4952 . done ( newDefer . resolve )
50- . fail ( newDefer . reject )
51- . progress ( newDefer . notify ) ;
53+ . fail ( newDefer . reject ) ;
5254 } else {
5355 newDefer [ tuple [ 0 ] + "With" ] (
5456 this === promise ? newDefer . promise ( ) : this ,
@@ -177,7 +179,7 @@ jQuery.extend({
177179
178180 return jQuery . Deferred ( function ( newDefer ) {
179181 // progress_handlers.add( ... )
180- tuples [ 2 ] [ 3 ] . add (
182+ tuples [ 0 ] [ 3 ] . add (
181183 resolve (
182184 0 ,
183185 newDefer ,
@@ -189,7 +191,7 @@ jQuery.extend({
189191 ) ;
190192
191193 // fulfilled_handlers.add( ... )
192- tuples [ 0 ] [ 3 ] . add (
194+ tuples [ 1 ] [ 3 ] . add (
193195 resolve (
194196 0 ,
195197 newDefer ,
@@ -200,7 +202,7 @@ jQuery.extend({
200202 ) ;
201203
202204 // rejected_handlers.add( ... )
203- tuples [ 1 ] [ 3 ] . add (
205+ tuples [ 2 ] [ 3 ] . add (
204206 resolve (
205207 0 ,
206208 newDefer ,
@@ -222,11 +224,11 @@ jQuery.extend({
222224 // Add list-specific methods
223225 jQuery . each ( tuples , function ( i , tuple ) {
224226 var list = tuple [ 2 ] ,
225- stateString = tuple [ 4 ] ;
227+ stateString = tuple [ 5 ] ;
226228
229+ // promise.progress = list.add
227230 // promise.done = list.add
228231 // promise.fail = list.add
229- // promise.progress = list.add
230232 promise [ tuple [ 1 ] ] = list . add ;
231233
232234 // Handle state
@@ -240,29 +242,29 @@ jQuery.extend({
240242
241243 // rejected_callbacks.disable
242244 // fulfilled_callbacks.disable
243- tuples [ i ^ 1 ] [ 2 ] . disable ,
245+ tuples [ 3 - i ] [ 2 ] . disable ,
244246
245247 // progress_callbacks.lock
246- tuples [ 2 ] [ 2 ] . lock
248+ tuples [ 0 ] [ 2 ] . lock
247249 ) ;
248250 }
249251
252+ // progress_handlers.fire
250253 // fulfilled_handlers.fire
251254 // rejected_handlers.fire
252- // progress_handlers.fire
253255 list . add ( tuple [ 3 ] . fire ) ;
254256
257+ // deferred.notify = function() { deferred.notifyWith(...) }
255258 // deferred.resolve = function() { deferred.resolveWith(...) }
256259 // deferred.reject = function() { deferred.rejectWith(...) }
257- // deferred.notify = function() { deferred.notifyWith(...) }
258260 deferred [ tuple [ 0 ] ] = function ( ) {
259261 deferred [ tuple [ 0 ] + "With" ] ( this === deferred ? promise : this , arguments ) ;
260262 return this ;
261263 } ;
262264
265+ // deferred.notifyWith = list.fireWith
263266 // deferred.resolveWith = list.fireWith
264267 // deferred.rejectWith = list.fireWith
265- // deferred.notifyWith = list.fireWith
266268 deferred [ tuple [ 0 ] + "With" ] = list . fireWith ;
267269 } ) ;
268270
0 commit comments