From: jaubourg Date: Wed, 5 Jan 2011 03:29:30 +0000 (+0100) Subject: "then" renamed "complete" and new "then" method defined using "complete" and "fail... X-Git-Url: http://git.asbjorn.biz/?p=jquery.git;a=commitdiff_plain;h=cbf591152c9f61381e552c9a15bb7c339f1451a9 "then" renamed "complete" and new "then" method defined using "complete" and "fail" internally. The API is still symetrical (complete/fail), still promotes AOP but is also now Promise/A compliant. Changed unit tests and ajax module accordingly. --- diff --git a/src/ajax.js b/src/ajax.js index 8670900..32f75f6 100644 --- a/src/ajax.js +++ b/src/ajax.js @@ -496,9 +496,9 @@ jQuery.extend({ // Attach deferreds deferred.promise( jXHR ); - jXHR.success = jXHR.then; + jXHR.success = jXHR.complete; jXHR.error = jXHR.fail; - jXHR.complete = completeDeferred.then; + jXHR.complete = completeDeferred.complete; // Remove hash character (#7531: and string promotion) s.url = ( "" + s.url ).replace( rhash , "" ); diff --git a/src/core.js b/src/core.js index 0211808..edd2c94 100644 --- a/src/core.js +++ b/src/core.js @@ -258,7 +258,7 @@ jQuery.fn = jQuery.prototype = { jQuery.bindReady(); // Change ready & apply - return ( jQuery.fn.ready = readyList.then ).apply( this , arguments ); + return ( jQuery.fn.ready = readyList.complete ).apply( this , arguments ); }, eq: function( i ) { @@ -815,8 +815,8 @@ jQuery.extend({ // the deferred itself deferred = { - // then( f1, f2, ...) - then: function () { + // complete( f1, f2, ...) + complete: function () { if ( ! cancelled ) { @@ -836,7 +836,7 @@ jQuery.extend({ elem = args[ i ]; type = jQuery.type( elem ); if ( type === "array" ) { - deferred.then.apply( deferred , elem ); + deferred.complete.apply( deferred , elem ); } else if ( type === "function" ) { callbacks.push( elem ); } @@ -901,27 +901,31 @@ jQuery.extend({ // Add errorDeferred methods and redefine cancel jQuery.extend( deferred , { - fail: failDeferred.then, - fireReject: failDeferred.fire, - 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 ) { - obj = obj || {}; - jQuery.each( "then fail isResolved isRejected".split( " " ) , function( _ , method ) { - obj[ method ] = deferred[ method ]; - }); - obj.promise = function() { - return obj; - }; + then: function( completeCallbacks , failCallbacks ) { + deferred.complete( completeCallbacks ).fail( failCallbacks ); + return this; + }, + fail: failDeferred.complete, + fireReject: failDeferred.fire, + 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 ) { + obj = obj || {}; + jQuery.each( "then complete fail isResolved isRejected".split( " " ) , function( _ , method ) { + obj[ method ] = deferred[ method ]; + }); + obj.promise = function() { return obj; - } + }; + return obj; + } } ); // Make sure only one callback list will be used - deferred.then( failDeferred.cancel ).fail( deferred.cancel ); + deferred.then( failDeferred.cancel , deferred.cancel ); // Unexpose cancel delete deferred.cancel; diff --git a/test/unit/core.js b/test/unit/core.js index 9367ab1..1fc2a4a 100644 --- a/test/unit/core.js +++ b/test/unit/core.js @@ -917,7 +917,7 @@ test("jQuery._Deferred()", function() { test = false; - deferred.then( function( value ) { + deferred.complete( function( value ) { equals( value , "value" , "Test pre-resolve callback" ); test = true; } ); @@ -928,7 +928,7 @@ test("jQuery._Deferred()", function() { test = false; - deferred.then( function( value ) { + deferred.complete( function( value ) { equals( value , "value" , "Test post-resolve callback" ); test = true; } ); @@ -939,7 +939,7 @@ test("jQuery._Deferred()", function() { test = true; - deferred.then( function() { + deferred.complete( function() { ok( false , "Cancel was ignored" ); test = false; } ); @@ -949,18 +949,18 @@ test("jQuery._Deferred()", function() { deferred = jQuery._Deferred().resolve(); try { - deferred.then( function() { + deferred.complete( function() { throw "Error"; } , function() { ok( true , "Test deferred do not cancel on exception" ); } ); } catch( e ) { strictEqual( e , "Error" , "Test deferred propagates exceptions"); - deferred.then(); + deferred.complete(); } test = ""; - deferred = jQuery._Deferred().then( function() { + deferred = jQuery._Deferred().complete( function() { test += "A"; @@ -970,13 +970,13 @@ test("jQuery._Deferred()", function() { } ).resolve(); - strictEqual( test , "AB" , "Test multiple then parameters" ); + strictEqual( test , "AB" , "Test multiple complete parameters" ); test = ""; - deferred.then( function() { + deferred.complete( function() { - deferred.then( function() { + deferred.complete( function() { test += "C"; @@ -989,11 +989,11 @@ test("jQuery._Deferred()", function() { test += "B"; } ); - strictEqual( test , "ABC" , "Test then callbacks order" ); + strictEqual( test , "ABC" , "Test complete callbacks order" ); deferred = jQuery._Deferred(); - deferred.fire( jQuery , [ document ] ).then( function( doc ) { + deferred.fire( jQuery , [ document ] ).complete( function( doc ) { ok( this === jQuery && arguments.length === 1 && doc === document , "Test fire context & args" ); }); }); @@ -1011,13 +1011,13 @@ test("jQuery.Deferred()", function() { jQuery.Deferred().resolve().then( function() { ok( true , "Success on resolve" ); - }).fail( function() { + }, function() { ok( false , "Error on resolve" ); }); jQuery.Deferred().reject().then( function() { ok( false , "Success on reject" ); - }).fail( function() { + }, function() { ok( true , "Error on reject" ); }); }); @@ -1055,7 +1055,7 @@ test("jQuery.when()", function() { }) ).then( function( value ) { strictEqual( value , 1 , "Function executed" + ( i > 1 ? " only once" : "" ) ); cache = value; - }).fail( function() { + }, function() { ok( false , "Fail called" ); }); }