@@ -558,7 +558,6 @@ export class SocketSdk {
558558 generator : AsyncGenerator < BatchPackageFetchResultType >
559559 promise : Promise < GeneratorStep >
560560 }
561- type ResolveFn = ( value : GeneratorStep ) => void
562561
563562 const { chunkSize = 500 , concurrencyLimit = 10 } = {
564563 __proto__ : null ,
@@ -593,14 +592,21 @@ export class SocketSdk {
593592 const continueGen = (
594593 generator : AsyncGenerator < BatchPackageFetchResultType >
595594 ) => {
596- let resolveFn : ResolveFn
595+ const {
596+ promise,
597+ resolve : resolveFn ,
598+ reject :rejectFn
599+ } = promiseWithResolvers < GeneratorStep > ( ) ;
597600 running . push ( {
598601 generator,
599- promise : new Promise < GeneratorStep > ( resolve => ( resolveFn = resolve ) )
602+ promise
600603 } )
601604 void generator
602605 . next ( )
603- . then ( iteratorResult => resolveFn ! ( { generator, iteratorResult } ) )
606+ . then (
607+ iteratorResult => resolveFn ( { generator, iteratorResult } ) ,
608+ rejectFn
609+ )
604610 }
605611 // Start initial batch of generators.
606612 while ( running . length < concurrencyLimit && index < componentsCount ) {
@@ -616,11 +622,14 @@ export class SocketSdk {
616622 running . findIndex ( entry => entry . generator === generator ) ,
617623 1
618624 )
625+ // Yield the value if one is given, even when done:true
626+ if ( iteratorResult . value ) {
627+ yield iteratorResult . value
628+ }
619629 if ( iteratorResult . done ) {
620630 // Start a new generator if available.
621631 enqueueGen ( )
622632 } else {
623- yield iteratorResult . value
624633 // Keep fetching values from this generator.
625634 continueGen ( generator )
626635 }
@@ -1118,3 +1127,15 @@ export class SocketSdk {
11181127 }
11191128 }
11201129}
1130+
1131+ function promiseWithResolvers < T > ( ) : ReturnType < typeof Promise . withResolvers < T > > {
1132+ if ( Promise . withResolvers ) {
1133+ return Promise . withResolvers < T > ( ) ;
1134+ }
1135+
1136+ // This is what the above does but it's not available in node 20 (it is in node 22)
1137+ // @ts -ignore -- sigh.
1138+ const obj : ReturnType < typeof Promise . withResolvers < T > > = { } ;
1139+ obj . promise = new Promise < T > ( ( resolver , reject ) => { obj . resolve = resolver ; obj . reject = reject ; } ) ;
1140+ return obj ;
1141+ }
0 commit comments