Skip to content

Commit 23d7cf0

Browse files
committed
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.
1 parent 282c044 commit 23d7cf0

File tree

2 files changed

+9
-6
lines changed

2 files changed

+9
-6
lines changed

src/deferred.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ jQuery.extend({
3232
.fail( newDefer.reject )
3333
.progress( newDefer.notify );
3434
} else {
35-
newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
35+
newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, [ returned ] );
3636
}
3737
} :
3838
newDefer[ action ]
@@ -70,8 +70,11 @@ jQuery.extend({
7070
}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
7171
}
7272

73-
// deferred[ resolve | reject | notify ] = list.fire
74-
deferred[ tuple[0] ] = list.fire;
73+
// deferred[ resolve | reject | notify ]
74+
deferred[ tuple[0] ] = function() {
75+
deferred[ tuple[0] + "With" ]( promise, arguments );
76+
return this;
77+
};
7578
deferred[ tuple[0] + "With" ] = list.fireWith;
7679
});
7780

test/unit/deferred.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ test( "jQuery.Deferred.then - context", function() {
292292
defer.resolve( 2 );
293293

294294
piped.done(function( value ) {
295-
strictEqual( this.promise(), piped, "default context gets updated to latest defer in the chain" );
295+
strictEqual( this, piped, "default context gets updated to latest promise in the chain" );
296296
strictEqual( value, 6, "proper value received" );
297297
});
298298
});
@@ -395,8 +395,8 @@ test( "jQuery.when - joined", function() {
395395
expected = shouldResolve ? [ 1, 1 ] : [ 0, undefined ],
396396
expectedNotify = shouldNotify && [ willNotify[ id1 ], willNotify[ id2 ] ],
397397
code = id1 + "/" + id2,
398-
context1 = defer1 && jQuery.isFunction( defer1.promise ) ? defer1 : undefined,
399-
context2 = defer2 && jQuery.isFunction( defer2.promise ) ? defer2 : undefined;
398+
context1 = defer1 && jQuery.isFunction( defer1.promise ) ? defer1.promise() : undefined,
399+
context2 = defer2 && jQuery.isFunction( defer2.promise ) ? defer2.promise() : undefined;
400400

401401
jQuery.when( defer1, defer2 ).done(function( a, b ) {
402402
if ( shouldResolve ) {

0 commit comments

Comments
 (0)