@@ -306,7 +306,14 @@ export function executeResolverOperationNodesWithDependenciesInParallel({
306
306
if ( isAsyncIterable ( fieldOpResult$ ) ) {
307
307
fieldOpAsyncIterables . push ( mapAsyncIterator ( fieldOpResult$ , handleFieldOpResult ) ) ;
308
308
} else if ( isPromise ( fieldOpResult$ ) ) {
309
- fieldOpPromises . push ( fieldOpResult$ . then ( handleFieldOpResult as any ) ) ;
309
+ fieldOpPromises . push (
310
+ fieldOpResult$ . then ( fieldOpResult => {
311
+ if ( isAsyncIterable ( fieldOpResult ) ) {
312
+ return mapAsyncIterator ( fieldOpResult , handleFieldOpResult as any ) ;
313
+ }
314
+ return handleFieldOpResult ( fieldOpResult as any ) ;
315
+ } ) ,
316
+ ) ;
310
317
} else {
311
318
handleFieldOpResult ( fieldOpResult$ ) ;
312
319
}
@@ -373,7 +380,16 @@ export function executeResolverOperationNodesWithDependenciesInParallel({
373
380
const mergedIterable = Repeater . merge ( [ ...fieldOpPromises , ...fieldOpAsyncIterables ] ) ;
374
381
asyncIterables . push ( mapAsyncIterator ( mergedIterable , handleFieldOpResults ) ) ;
375
382
} else if ( fieldOpPromises . length ) {
376
- dependencyPromises . push ( Promise . all ( fieldOpPromises ) . then ( handleFieldOpResults ) ) ;
383
+ dependencyPromises . push (
384
+ Promise . all ( fieldOpPromises ) . then ( fieldOpPromiseResults => {
385
+ const asyncIterablesInResults = fieldOpPromiseResults . filter ( isAsyncIterable ) ;
386
+ if ( asyncIterablesInResults . length ) {
387
+ const mergedIterable = Repeater . merge ( asyncIterablesInResults ) ;
388
+ return mapAsyncIterator ( mergedIterable , handleFieldOpResults ) ;
389
+ }
390
+ return handleFieldOpResults ( ) ;
391
+ } ) ,
392
+ ) ;
377
393
} else {
378
394
handleFieldOpResults ( ) ;
379
395
}
@@ -390,7 +406,14 @@ export function executeResolverOperationNodesWithDependenciesInParallel({
390
406
return mapAsyncIterator ( mergedIterable , handleDependencyPromises ) ;
391
407
}
392
408
if ( dependencyPromises . length ) {
393
- return Promise . all ( dependencyPromises ) . then ( handleDependencyPromises ) ;
409
+ return Promise . all ( dependencyPromises ) . then ( dependencyPromiseResults => {
410
+ const asyncIterablesInResults = dependencyPromiseResults . filter ( isAsyncIterable ) ;
411
+ if ( asyncIterablesInResults . length ) {
412
+ const mergedIterable = Repeater . merge ( asyncIterablesInResults ) ;
413
+ return mapAsyncIterator ( mergedIterable , handleDependencyPromises ) ;
414
+ }
415
+ return handleDependencyPromises ( ) ;
416
+ } ) ;
394
417
}
395
418
return handleDependencyPromises ( ) ;
396
419
}
@@ -627,7 +650,12 @@ export function executeResolverOperationNode({
627
650
}
628
651
629
652
if ( isPromise ( result$ ) ) {
630
- return result$ . then ( handleResult ) ;
653
+ return result$ . then ( result => {
654
+ if ( isAsyncIterable ( result ) ) {
655
+ return mapAsyncIterator ( result as AsyncIterableIterator < any > , handleResult as any ) ;
656
+ }
657
+ return handleResult ( result ) ;
658
+ } ) ;
631
659
}
632
660
633
661
return handleResult ( result$ ) ;
0 commit comments