-
- var errorDeferred = jQuery._Deferred(),
- deferred = jQuery._Deferred(),
- successCancel = deferred.cancel;
-
- // Add errorDeferred methods and redefine cancel
- jQuery.extend( deferred , {
-
- fail: errorDeferred.then,
- fireReject: errorDeferred.fire,
- reject: errorDeferred.resolve,
- isRejected: errorDeferred.isResolved
-
+ var deferred = jQuery._Deferred(),
+ failDeferred = jQuery._Deferred(),
+ promise,
+ invert;
+ // Add errorDeferred methods, then, promise and invert
+ jQuery.extend( deferred, {
+ then: function( doneCallbacks, failCallbacks ) {
+ deferred.done( doneCallbacks ).fail( failCallbacks );
+ return this;
+ },
+ fail: failDeferred.done,
+ rejectWith: failDeferred.resolveWith,
+ reject: failDeferred.resolve,
+ isRejected: failDeferred.isResolved,
+ // Get a promise for this deferred
+ // If obj is provided, the promise aspect is added to the object
+ promise: function( obj ) {
+ if ( obj == null ) {
+ if ( promise ) {
+ return promise;
+ }
+ promise = obj = {};
+ }
+ for( var methodName in promiseMethods ) {
+ obj[ methodName ] = deferred[ methodName ];
+ }
+ return obj;
+ },
+ // Get the invert promise for this deferred
+ // If obj is provided, the invert promise aspect is added to the object
+ invert: function( obj ) {
+ if ( obj == null ) {
+ if ( invert ) {
+ return invert;
+ }
+ invert = obj = {};
+ }
+ for( var methodName in promiseMethods ) {
+ obj[ methodName ] = promiseMethods[ methodName ] && deferred[ promiseMethods[methodName] ];
+ }
+ obj.then = invert.then || function( doneCallbacks, failCallbacks ) {
+ deferred.done( failCallbacks ).fail( doneCallbacks );
+ return this;
+ };
+ return obj;
+ }