From: jaubourg Date: Fri, 7 Dec 2012 14:14:12 +0000 (+0100) Subject: Deferred: .resolve(), .reject() and .notify() now set the callback context to the... X-Git-Tag: 1.9.0b1~45 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=23d7cf0488bfeaab51d8f55435cab01f5cf990ca;p=jquery.git Deferred: .resolve(), .reject() and .notify() now set the callback context to the promise instance rather than the deferred instance ; .then() has also been amended. Fixes #11405. --- diff --git a/src/deferred.js b/src/deferred.js index e525fc068..d84206570 100644 --- a/src/deferred.js +++ b/src/deferred.js @@ -32,7 +32,7 @@ jQuery.extend({ .fail( newDefer.reject ) .progress( newDefer.notify ); } else { - newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] ); + newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, [ returned ] ); } } : newDefer[ action ] @@ -70,8 +70,11 @@ jQuery.extend({ }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); } - // deferred[ resolve | reject | notify ] = list.fire - deferred[ tuple[0] ] = list.fire; + // deferred[ resolve | reject | notify ] + deferred[ tuple[0] ] = function() { + deferred[ tuple[0] + "With" ]( promise, arguments ); + return this; + }; deferred[ tuple[0] + "With" ] = list.fireWith; }); diff --git a/test/unit/deferred.js b/test/unit/deferred.js index 80827c641..86b0b3411 100644 --- a/test/unit/deferred.js +++ b/test/unit/deferred.js @@ -292,7 +292,7 @@ test( "jQuery.Deferred.then - context", function() { defer.resolve( 2 ); piped.done(function( value ) { - strictEqual( this.promise(), piped, "default context gets updated to latest defer in the chain" ); + strictEqual( this, piped, "default context gets updated to latest promise in the chain" ); strictEqual( value, 6, "proper value received" ); }); }); @@ -395,8 +395,8 @@ test( "jQuery.when - joined", function() { expected = shouldResolve ? [ 1, 1 ] : [ 0, undefined ], expectedNotify = shouldNotify && [ willNotify[ id1 ], willNotify[ id2 ] ], code = id1 + "/" + id2, - context1 = defer1 && jQuery.isFunction( defer1.promise ) ? defer1 : undefined, - context2 = defer2 && jQuery.isFunction( defer2.promise ) ? defer2 : undefined; + context1 = defer1 && jQuery.isFunction( defer1.promise ) ? defer1.promise() : undefined, + context2 = defer2 && jQuery.isFunction( defer2.promise ) ? defer2.promise() : undefined; jQuery.when( defer1, defer2 ).done(function( a, b ) { if ( shouldResolve ) {