File tree 2 files changed +42
-5
lines changed 2 files changed +42
-5
lines changed Original file line number Diff line number Diff line change @@ -381,7 +381,8 @@ export default class ParsePromise {
381
381
*/
382
382
static when ( promises ) {
383
383
var objects ;
384
- if ( Array . isArray ( promises ) ) {
384
+ var arrayArgument = Array . isArray ( promises ) ;
385
+ if ( arrayArgument ) {
385
386
objects = promises ;
386
387
} else {
387
388
objects = arguments ;
@@ -390,12 +391,13 @@ export default class ParsePromise {
390
391
var total = objects . length ;
391
392
var hadError = false ;
392
393
var results = [ ] ;
394
+ var returnValue = arrayArgument ? [ results ] : results ;
393
395
var errors = [ ] ;
394
396
results . length = objects . length ;
395
397
errors . length = objects . length ;
396
398
397
399
if ( total === 0 ) {
398
- return ParsePromise . as . apply ( this , results ) ;
400
+ return ParsePromise . as . apply ( this , returnValue ) ;
399
401
}
400
402
401
403
var promise = new ParsePromise ( ) ;
@@ -406,7 +408,7 @@ export default class ParsePromise {
406
408
if ( hadError ) {
407
409
promise . reject ( errors ) ;
408
410
} else {
409
- promise . resolve . apply ( promise , results ) ;
411
+ promise . resolve . apply ( promise , returnValue ) ;
410
412
}
411
413
}
412
414
} ;
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