Skip to content

Commit bdf1b8f

Browse files
committed
Deferred: Remove undocumented progress notifications in $.when
Fixes jquerygh-2710 Closes jquerygh-2816
1 parent f5fb8d7 commit bdf1b8f

File tree

2 files changed

+22
-41
lines changed

2 files changed

+22
-41
lines changed

src/deferred.js

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ jQuery.extend( {
295295

296296
// Deferred helper
297297
when: function() {
298-
var method,
298+
var method, resolveContexts,
299299
i = 0,
300300
resolveValues = slice.call( arguments ),
301301
length = resolveValues.length,
@@ -306,47 +306,44 @@ jQuery.extend( {
306306
// the master Deferred.
307307
master = jQuery.Deferred(),
308308

309-
// Update function for both resolve and progress values
310-
updateFunc = function( i, contexts, values ) {
309+
// Update function for both resolving subordinates
310+
updateFunc = function( i ) {
311311
return function( value ) {
312-
contexts[ i ] = this;
313-
values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
314-
if ( values === progressValues ) {
315-
master.notifyWith( contexts, values );
316-
} else if ( !( --remaining ) ) {
312+
resolveContexts[ i ] = this;
313+
resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
314+
if ( !( --remaining ) ) {
317315
master.resolveWith(
318-
contexts.length === 1 ? contexts[ 0 ] : contexts,
319-
values
316+
resolveContexts.length === 1 ? resolveContexts[ 0 ] : resolveContexts,
317+
resolveValues
320318
);
321319
}
322320
};
323-
},
324-
progressValues, progressContexts, resolveContexts;
321+
};
325322

326-
// Add listeners to Deferred subordinates; treat others as resolved
323+
// Add listeners to promise-like subordinates; treat others as resolved
327324
if ( length > 0 ) {
328-
progressValues = new Array( length );
329-
progressContexts = new Array( length );
330325
resolveContexts = new Array( length );
331326
for ( ; i < length; i++ ) {
327+
328+
// jQuery.Deferred - treated specially to get resolve-sync behavior
332329
if ( resolveValues[ i ] &&
333330
jQuery.isFunction( ( method = resolveValues[ i ].promise ) ) ) {
334331

335332
method.call( resolveValues[ i ] )
336-
.progress( updateFunc( i, progressContexts, progressValues ) )
337-
.done( updateFunc( i, resolveContexts, resolveValues ) )
333+
.done( updateFunc( i ) )
338334
.fail( master.reject );
335+
336+
// Other thenables
339337
} else if ( resolveValues[ i ] &&
340338
jQuery.isFunction( ( method = resolveValues[ i ].then ) ) ) {
341339

342340
method.call(
343341
resolveValues[ i ],
344-
updateFunc( i, resolveContexts, resolveValues ),
345-
master.reject,
346-
updateFunc( i, progressContexts, progressValues )
342+
updateFunc( i ),
343+
master.reject
347344
);
348345
} else {
349-
updateFunc( i, resolveContexts, resolveValues )( resolveValues[ i ] );
346+
updateFunc( i )( resolveValues[ i ] );
350347
}
351348
}
352349

test/unit/deferred.js

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -710,13 +710,12 @@ QUnit.test( "jQuery.when", function( assert ) {
710710

711711
QUnit.test( "jQuery.when - joined", function( assert ) {
712712

713-
assert.expect( 195 );
713+
assert.expect( 81 );
714714

715715
var deferreds = {
716716
rawValue: 1,
717717
fulfilled: jQuery.Deferred().resolve( 1 ),
718718
rejected: jQuery.Deferred().reject( 0 ),
719-
notified: jQuery.Deferred().notify( true ),
720719
eventuallyFulfilled: jQuery.Deferred().notify( true ),
721720
eventuallyRejected: jQuery.Deferred().notify( true ),
722721
fulfilledStandardPromise: Promise.resolve( 1 ),
@@ -733,11 +732,6 @@ QUnit.test( "jQuery.when - joined", function( assert ) {
733732
eventuallyRejected: true,
734733
rejectedStandardPromise: true
735734
},
736-
willNotify = {
737-
notified: true,
738-
eventuallyFulfilled: true,
739-
eventuallyRejected: true
740-
},
741735
counter = 49;
742736

743737
QUnit.stop();
@@ -752,9 +746,7 @@ QUnit.test( "jQuery.when - joined", function( assert ) {
752746
jQuery.each( deferreds, function( id2, defer2 ) {
753747
var shouldResolve = willSucceed[ id1 ] && willSucceed[ id2 ],
754748
shouldError = willError[ id1 ] || willError[ id2 ],
755-
shouldNotify = willNotify[ id1 ] || willNotify[ id2 ],
756749
expected = shouldResolve ? [ 1, 1 ] : [ 0, undefined ],
757-
expectedNotify = shouldNotify && [ willNotify[ id1 ], willNotify[ id2 ] ],
758750
code = "jQuery.when( " + id1 + ", " + id2 + " )",
759751
context1 = defer1 && jQuery.isFunction( defer1.promise ) ? defer1.promise() : window,
760752
context2 = defer2 && jQuery.isFunction( defer2.promise ) ? defer2.promise() : window;
@@ -773,30 +765,22 @@ QUnit.test( "jQuery.when - joined", function( assert ) {
773765
} else {
774766
assert.ok( false, code + " => reject" );
775767
}
776-
} ).progress( function( a, b ) {
777-
assert.deepEqual( [ a, b ], expectedNotify, code + " => progress" );
778-
assert.strictEqual( this[ 0 ], expectedNotify[ 0 ] ? context1 : undefined, code + " => first context OK" );
779-
assert.strictEqual( this[ 1 ], expectedNotify[ 1 ] ? context2 : undefined, code + " => second context OK" );
780768
} ).always( restart );
781769
} );
782770
} );
783771
deferreds.eventuallyFulfilled.resolve( 1 );
784772
deferreds.eventuallyRejected.reject( 0 );
785773
} );
786774

787-
QUnit.test( "jQuery.when - resolved", function( assert ) {
775+
QUnit.test( "jQuery.when - notify does not affect resolved", function( assert ) {
788776

789-
assert.expect( 6 );
777+
assert.expect( 3 );
790778

791779
var a = jQuery.Deferred().notify( 1 ).resolve( 4 ),
792780
b = jQuery.Deferred().notify( 2 ).resolve( 5 ),
793781
c = jQuery.Deferred().notify( 3 ).resolve( 6 );
794782

795-
jQuery.when( a, b, c ).progress( function( a, b, c ) {
796-
assert.strictEqual( a, 1, "first notify value ok" );
797-
assert.strictEqual( b, 2, "second notify value ok" );
798-
assert.strictEqual( c, 3, "third notify value ok" );
799-
} ).done( function( a, b, c ) {
783+
jQuery.when( a, b, c ).done( function( a, b, c ) {
800784
assert.strictEqual( a, 4, "first resolve value ok" );
801785
assert.strictEqual( b, 5, "second resolve value ok" );
802786
assert.strictEqual( c, 6, "third resolve value ok" );

0 commit comments

Comments
 (0)