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 @@ -381,7 +381,8 @@ export default class ParsePromise {
381381 */
382382 static when ( promises ) {
383383 var objects ;
384- if ( Array . isArray ( promises ) ) {
384+ var arrayArgument = Array . isArray ( promises ) ;
385+ if ( arrayArgument ) {
385386 objects = promises ;
386387 } else {
387388 objects = arguments ;
@@ -390,12 +391,13 @@ export default class ParsePromise {
390391 var total = objects . length ;
391392 var hadError = false ;
392393 var results = [ ] ;
394+ var returnValue = arrayArgument ? [ results ] : results ;
393395 var errors = [ ] ;
394396 results . length = objects . length ;
395397 errors . length = objects . length ;
396398
397399 if ( total === 0 ) {
398- return ParsePromise . as . apply ( this , results ) ;
400+ return ParsePromise . as . apply ( this , returnValue ) ;
399401 }
400402
401403 var promise = new ParsePromise ( ) ;
@@ -406,7 +408,7 @@ export default class ParsePromise {
406408 if ( hadError ) {
407409 promise . reject ( errors ) ;
408410 } else {
409- promise . resolve . apply ( promise , results ) ;
411+ promise . resolve . apply ( promise , returnValue ) ;
410412 }
411413 }
412414 } ;
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