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 {
346
346
*/
347
347
static when ( promises ) {
348
348
var objects ;
349
- if ( Array . isArray ( promises ) ) {
349
+ var arrayArgument = Array . isArray ( promises ) ;
350
+ if ( arrayArgument ) {
350
351
objects = promises ;
351
352
} else {
352
353
objects = arguments ;
@@ -355,12 +356,13 @@ export default class ParsePromise {
355
356
var total = objects . length ;
356
357
var hadError = false ;
357
358
var results = [ ] ;
359
+ var returnValue = arrayArgument ? [ results ] : results ;
358
360
var errors = [ ] ;
359
361
results . length = objects . length ;
360
362
errors . length = objects . length ;
361
363
362
364
if ( total === 0 ) {
363
- return ParsePromise . as . apply ( this , results ) ;
365
+ return ParsePromise . as . apply ( this , returnValue ) ;
364
366
}
365
367
366
368
var promise = new ParsePromise ( ) ;
@@ -371,7 +373,7 @@ export default class ParsePromise {
371
373
if ( hadError ) {
372
374
promise . reject ( errors ) ;
373
375
} else {
374
- promise . resolve . apply ( promise , results ) ;
376
+ promise . resolve . apply ( promise , returnValue ) ;
375
377
}
376
378
}
377
379
} ;
Original file line number Diff line number Diff line change @@ -227,7 +227,7 @@ describe('Promise', () => {
227
227
jest . runAllTimers ( ) ;
228
228
} ) ) ;
229
229
230
- it ( 'can handle promises in parallel' , asyncHelper ( function ( done ) {
230
+ it ( 'can handle promises in parallel with array ' , asyncHelper ( function ( done ) {
231
231
var COUNT = 5 ;
232
232
233
233
var delay = function ( ms ) {
@@ -249,7 +249,42 @@ describe('Promise', () => {
249
249
generate ( i ) ;
250
250
}
251
251
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 ( ) {
253
288
expect ( called ) . toBe ( COUNT ) ;
254
289
expect ( COUNT ) . toBe ( arguments . length ) ;
255
290
var actual = arguments ;
You can’t perform that action at this time.
0 commit comments