mirror of
https://github.com/jquery/jquery.git
synced 2024-11-23 02:54:22 +00:00
Deferred: Stop inventing jQuery.when() resolution values
Fixes gh-3442 Closes gh-3445
This commit is contained in:
parent
1777899a74
commit
5d79c64663
@ -13,7 +13,7 @@ function Thrower( ex ) {
|
||||
throw ex;
|
||||
}
|
||||
|
||||
function adoptValue( value, resolve, reject ) {
|
||||
function adoptValue( value, resolve, reject, noValue ) {
|
||||
var method;
|
||||
|
||||
try {
|
||||
@ -29,9 +29,10 @@ function adoptValue( value, resolve, reject ) {
|
||||
// Other non-thenables
|
||||
} else {
|
||||
|
||||
// Support: Android 4.0 only
|
||||
// Strict mode functions invoked without .call/.apply get global-object context
|
||||
resolve.call( undefined, value );
|
||||
// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
|
||||
// * false: [ value ].slice( 0 ) => resolve( value )
|
||||
// * true: [ value ].slice( 1 ) => resolve()
|
||||
resolve.apply( undefined, [ value ].slice( noValue ) );
|
||||
}
|
||||
|
||||
// For Promises/A+, convert exceptions into rejections
|
||||
@ -41,7 +42,7 @@ function adoptValue( value, resolve, reject ) {
|
||||
|
||||
// Support: Android 4.0 only
|
||||
// Strict mode functions invoked without .call/.apply get global-object context
|
||||
reject.call( undefined, value );
|
||||
reject.apply( undefined, [ value ] );
|
||||
}
|
||||
}
|
||||
|
||||
@ -366,7 +367,8 @@ jQuery.extend( {
|
||||
|
||||
// Single- and empty arguments are adopted like Promise.resolve
|
||||
if ( remaining <= 1 ) {
|
||||
adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject );
|
||||
adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
|
||||
!remaining );
|
||||
|
||||
// Use .then() to unwrap secondary thenables (cf. gh-3000)
|
||||
if ( master.state() === "pending" ||
|
||||
|
@ -814,11 +814,11 @@ QUnit.test( "jQuery.when(nonThenable) - like Promise.resolve", function( assert
|
||||
|
||||
jQuery.when()
|
||||
.done( function( resolveValue ) {
|
||||
assert.strictEqual( resolveValue, undefined, "Resolved .done with no arguments" );
|
||||
assert.strictEqual( arguments.length, 0, "Resolved .done with no arguments" );
|
||||
assert.strictEqual( this, defaultContext, "Default .done context with no arguments" );
|
||||
} )
|
||||
.then( function( resolveValue ) {
|
||||
assert.strictEqual( resolveValue, undefined, "Resolved .then with no arguments" );
|
||||
assert.strictEqual( arguments.length, 0, "Resolved .then with no arguments" );
|
||||
assert.strictEqual( this, defaultContext, "Default .then context with no arguments" );
|
||||
} );
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user