@@ -28,13 +28,6 @@ $({ target: 'Promise', stat: true, forced: true }, {
2828 var resolve = capability . resolve ;
2929 var reject = capability . reject ;
3030 var result = perform ( function ( ) {
31- var wrapResolve = function ( ) {
32- var res = create ( null ) ;
33- forEach ( keys , function ( k , idx ) {
34- createProperty ( res , k , values [ idx ] ) ;
35- } ) ;
36- resolve ( res ) ;
37- } ;
3831 var promiseResolve = aCallable ( C . resolve ) ;
3932 var allKeys = ownKeys ( anObject ( promises ) ) ;
4033 var keys = [ ] ;
@@ -44,26 +37,31 @@ $({ target: 'Promise', stat: true, forced: true }, {
4437 forEach ( allKeys , function ( key ) {
4538 var desc = getOwnPropertyDescriptor . f ( promises , key ) ;
4639 if ( desc && desc . enumerable ) {
40+ var createElementResolver = function ( rejection ) {
41+ return function ( value ) {
42+ if ( alreadyCalled ) return ;
43+ alreadyCalled = true ;
44+ values [ index ] = rejection
45+ ? { status : 'rejected' , reason : value }
46+ : { status : 'fulfilled' , value : value } ;
47+ if ( -- remaining ) return ;
48+ var res = create ( null ) ;
49+ forEach ( keys , function ( k , i ) {
50+ createProperty ( res , k , values [ i ] ) ;
51+ } ) ;
52+ resolve ( res ) ;
53+ } ;
54+ } ;
4755 var index = counter ;
4856 var alreadyCalled = false ;
4957 remaining ++ ;
5058 keys [ index ] = key ;
5159 values [ index ] = undefined ;
52- call ( promiseResolve , C , promises [ key ] ) . then ( function ( value ) {
53- if ( alreadyCalled ) return ;
54- alreadyCalled = true ;
55- values [ index ] = { status : 'fulfilled' , value : value } ;
56- -- remaining || wrapResolve ( ) ;
57- } , function ( error ) {
58- if ( alreadyCalled ) return ;
59- alreadyCalled = true ;
60- values [ index ] = { status : 'rejected' , reason : error } ;
61- -- remaining || wrapResolve ( ) ;
62- } ) ;
60+ call ( promiseResolve , C , promises [ key ] ) . then ( createElementResolver ( false ) , createElementResolver ( true ) ) ;
6361 counter ++ ;
6462 }
6563 } ) ;
66- -- remaining || wrapResolve ( ) ;
64+ -- remaining || resolve ( create ( null ) ) ;
6765 } ) ;
6866 if ( result . error ) reject ( result . value ) ;
6967 return capability . promise ;
0 commit comments