File tree Expand file tree Collapse file tree 2 files changed +42
-5
lines changed Expand file tree Collapse file tree 2 files changed +42
-5
lines changed Original file line number Diff line number Diff line change @@ -346,7 +346,8 @@ export default class ParsePromise {
346346 */
347347 static when ( promises ) {
348348 var objects ;
349- if ( Array . isArray ( promises ) ) {
349+ var arrayArgument = Array . isArray ( promises ) ;
350+ if ( arrayArgument ) {
350351 objects = promises ;
351352 } else {
352353 objects = arguments ;
@@ -355,12 +356,13 @@ export default class ParsePromise {
355356 var total = objects . length ;
356357 var hadError = false ;
357358 var results = [ ] ;
359+ var returnValue = arrayArgument ? [ results ] : results ;
358360 var errors = [ ] ;
359361 results . length = objects . length ;
360362 errors . length = objects . length ;
361363
362364 if ( total === 0 ) {
363- return ParsePromise . as . apply ( this , results ) ;
365+ return ParsePromise . as . apply ( this , returnValue ) ;
364366 }
365367
366368 var promise = new ParsePromise ( ) ;
@@ -371,7 +373,7 @@ export default class ParsePromise {
371373 if ( hadError ) {
372374 promise . reject ( errors ) ;
373375 } else {
374- promise . resolve . apply ( promise , results ) ;
376+ promise . resolve . apply ( promise , returnValue ) ;
375377 }
376378 }
377379 } ;
Original file line number Diff line number Diff line change @@ -227,7 +227,7 @@ describe('Promise', () => {
227227 jest . runAllTimers ( ) ;
228228 } ) ) ;
229229
230- it ( 'can handle promises in parallel' , asyncHelper ( function ( done ) {
230+ it ( 'can handle promises in parallel with array ' , asyncHelper ( function ( done ) {
231231 var COUNT = 5 ;
232232
233233 var delay = function ( ms ) {
@@ -249,7 +249,42 @@ describe('Promise', () => {
249249 generate ( i ) ;
250250 }
251251
252- ParsePromise . when ( promises ) . then ( function ( ) {
252+ ParsePromise . when ( promises ) . then ( function ( results ) {
253+ expect ( called ) . toBe ( COUNT ) ;
254+ expect ( COUNT ) . toBe ( results . length ) ;
255+ var actual = results ;
256+ for ( var i = 0 ; i < actual . length ; i ++ ) {
257+ expect ( actual [ i ] ) . toBe ( 5 * i ) ;
258+ }
259+ done ( ) ;
260+ } ) ;
261+
262+ jest . runAllTimers ( ) ;
263+ } ) ) ;
264+
265+ it ( 'can handle promises in parallel with arguments' , asyncHelper ( function ( done ) {
266+ var COUNT = 5 ;
267+
268+ var delay = function ( ms ) {
269+ var promise = new ParsePromise ( ) ;
270+ setTimeout ( ( ) => { promise . resolve ( ) ; } , ms ) ;
271+ return promise ;
272+ } ;
273+
274+ var called = 0 ;
275+ var promises = [ ] ;
276+ function generate ( i ) {
277+ promises [ i ] = delay ( ( i % 2 ) ? ( i * 10 ) : ( COUNT * 10 ) - ( i * 10 ) ) . then (
278+ function ( ) {
279+ called ++ ;
280+ return 5 * i ;
281+ } ) ;
282+ }
283+ for ( var i = 0 ; i < COUNT ; i ++ ) {
284+ generate ( i ) ;
285+ }
286+
287+ ParsePromise . when . apply ( null , promises ) . then ( function ( ) {
253288 expect ( called ) . toBe ( COUNT ) ;
254289 expect ( COUNT ) . toBe ( arguments . length ) ;
255290 var actual = arguments ;
You can’t perform that action at this time.
0 commit comments