mirror of
https://github.com/jquery/jquery.git
synced 2026-04-20 03:01:22 -04:00
Propagate context of returned deferred object in Deferred.then(). Fixes #13160.
This commit is contained in:
@@ -21,22 +21,19 @@ jQuery.extend({
|
||||
return jQuery.Deferred(function( newDefer ) {
|
||||
jQuery.each( tuples, function( i, tuple ) {
|
||||
var action = tuple[ 0 ],
|
||||
fn = fns[ i ];
|
||||
fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
|
||||
// deferred[ done | fail | progress ] for forwarding actions to newDefer
|
||||
deferred[ tuple[1] ]( jQuery.isFunction( fn ) ?
|
||||
function() {
|
||||
var returned = fn.apply( this, arguments );
|
||||
if ( returned && jQuery.isFunction( returned.promise ) ) {
|
||||
returned.promise()
|
||||
.done( newDefer.resolve )
|
||||
.fail( newDefer.reject )
|
||||
.progress( newDefer.notify );
|
||||
} else {
|
||||
newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, [ returned ] );
|
||||
}
|
||||
} :
|
||||
newDefer[ action ]
|
||||
);
|
||||
deferred[ tuple[1] ](function() {
|
||||
var returned = fn && fn.apply( this, arguments );
|
||||
if ( returned && jQuery.isFunction( returned.promise ) ) {
|
||||
returned.promise()
|
||||
.done( newDefer.resolve )
|
||||
.fail( newDefer.reject )
|
||||
.progress( newDefer.notify );
|
||||
} else {
|
||||
newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
|
||||
}
|
||||
});
|
||||
});
|
||||
fns = null;
|
||||
}).promise();
|
||||
@@ -72,7 +69,7 @@ jQuery.extend({
|
||||
|
||||
// deferred[ resolve | reject | notify ]
|
||||
deferred[ tuple[0] ] = function() {
|
||||
deferred[ tuple[0] + "With" ]( promise, arguments );
|
||||
deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
|
||||
return this;
|
||||
};
|
||||
deferred[ tuple[0] + "With" ] = list.fireWith;
|
||||
|
||||
Reference in New Issue
Block a user