diff options
author | jaubourg <j@ubourg.net> | 2012-04-02 01:29:39 +0200 |
---|---|---|
committer | jaubourg <j@ubourg.net> | 2012-04-02 01:29:39 +0200 |
commit | a41f2406748e3113751ab1e5b5d990d9144123fc (patch) | |
tree | d851963d2b4a5468cf27ae67df28b51d65f3ab55 /src | |
parent | a29d482894a844724f4386f2fed0edf9cf70c069 (diff) | |
download | jquery-a41f2406748e3113751ab1e5b5d990d9144123fc.tar.gz jquery-a41f2406748e3113751ab1e5b5d990d9144123fc.zip |
Makes Deferred implementation truly Promise/A compliant. Unit tests amended. Actually few changes required in jQuery's own source and we gained 8 bytes minified gzipped \o/.
Diffstat (limited to 'src')
-rw-r--r-- | src/ajax.js | 2 | ||||
-rw-r--r-- | src/deferred.js | 18 |
2 files changed, 11 insertions, 9 deletions
diff --git a/src/ajax.js b/src/ajax.js index 2bcc1d0a2..b241b257e 100644 --- a/src/ajax.js +++ b/src/ajax.js @@ -609,7 +609,7 @@ jQuery.extend({ } } else { tmp = map[ jqXHR.status ]; - jqXHR.then( tmp, tmp ); + jqXHR.always( tmp ); } } return this; diff --git a/src/deferred.js b/src/deferred.js index c97084b70..ddc324738 100644 --- a/src/deferred.js +++ b/src/deferred.js @@ -28,15 +28,11 @@ jQuery.extend({ isResolved: doneList.fired, isRejected: failList.fired, - then: function( doneCallbacks, failCallbacks, progressCallbacks ) { - deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks ); - return this; - }, always: function() { deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments ); return this; }, - pipe: function( fnDone, fnFail, fnProgress ) { + then: function( fnDone, fnFail, fnProgress ) { return jQuery.Deferred(function( newDefer ) { jQuery.each( { done: [ fnDone, "resolve" ], @@ -50,7 +46,7 @@ jQuery.extend({ deferred[ handler ](function() { returned = fn.apply( this, arguments ); if ( returned && jQuery.isFunction( returned.promise ) ) { - returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify ); + returned.promise().done( newDefer.resolve ).fail( newDefer.reject ).progress( newDefer.notify ); } else { newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] ); } @@ -74,9 +70,15 @@ jQuery.extend({ return obj; } }, - deferred = promise.promise({}), + deferred, key; + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Construct deferred + deferred = promise.promise({}); + for ( key in lists ) { deferred[ key ] = lists[ key ].fire; deferred[ key + "With" ] = lists[ key ].fireWith; @@ -127,7 +129,7 @@ jQuery.extend({ if ( length > 1 ) { for ( ; i < length; i++ ) { if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) { - args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) ); + args[ i ].promise().done( resolveFunc(i) ).fail( deferred.reject ).progress( progressFunc(i) ); } else { --count; } |