@@ -746,14 +746,13 @@ function executeField(
746
746
) ;
747
747
748
748
if ( isPromise ( completed ) ) {
749
- return handleAsyncCompletionError (
750
- completed ,
751
- exeContext ,
752
- returnType ,
753
- fieldNodes ,
754
- path ,
755
- asyncPayloadRecord ,
756
- ) ;
749
+ return catchAfter ( completed , ( rawError ) => {
750
+ const errors = asyncPayloadRecord ?. errors ?? exeContext . errors ;
751
+ const error = locatedError ( rawError , fieldNodes , pathToArray ( path ) ) ;
752
+ const handledError = handleFieldError ( error , returnType , errors ) ;
753
+ filterSubsequentPayloads ( exeContext , path , asyncPayloadRecord ) ;
754
+ return handledError ;
755
+ } ) ;
757
756
}
758
757
return completed ;
759
758
} catch ( rawError ) {
@@ -765,25 +764,6 @@ function executeField(
765
764
}
766
765
}
767
766
768
- async function handleAsyncCompletionError (
769
- promised : Promise < unknown > ,
770
- exeContext : ExecutionContext ,
771
- returnType : GraphQLOutputType ,
772
- fieldNodes : ReadonlyArray < FieldNode > ,
773
- path : Path ,
774
- asyncPayloadRecord ?: AsyncPayloadRecord ,
775
- ) : Promise < unknown > {
776
- try {
777
- return await promised ;
778
- } catch ( rawError ) {
779
- const errors = asyncPayloadRecord ?. errors ?? exeContext . errors ;
780
- const error = locatedError ( rawError , fieldNodes , pathToArray ( path ) ) ;
781
- const handledError = handleFieldError ( error , returnType , errors ) ;
782
- filterSubsequentPayloads ( exeContext , path , asyncPayloadRecord ) ;
783
- return handledError ;
784
- }
785
- }
786
-
787
767
/**
788
768
* TODO: consider no longer exporting this function
789
769
* @internal
@@ -1240,14 +1220,16 @@ function completeListItemValue(
1240
1220
// Note: we don't rely on a `catch` method, but we do expect "thenable"
1241
1221
// to take a second callback for the error case.
1242
1222
completedResults . push (
1243
- handleAsyncCompletionError (
1244
- completedItem ,
1245
- exeContext ,
1246
- itemType ,
1247
- fieldNodes ,
1248
- itemPath ,
1249
- asyncPayloadRecord ,
1250
- ) ,
1223
+ catchAfter ( completedItem , ( rawError ) => {
1224
+ const error = locatedError (
1225
+ rawError ,
1226
+ fieldNodes ,
1227
+ pathToArray ( itemPath ) ,
1228
+ ) ;
1229
+ const handledError = handleFieldError ( error , itemType , errors ) ;
1230
+ filterSubsequentPayloads ( exeContext , itemPath , asyncPayloadRecord ) ;
1231
+ return handledError ;
1232
+ } ) ,
1251
1233
) ;
1252
1234
1253
1235
return true ;
@@ -2059,14 +2041,13 @@ async function executeStreamIteratorItem(
2059
2041
) ;
2060
2042
2061
2043
if ( isPromise ( completedItem ) ) {
2062
- completedItem = handleAsyncCompletionError (
2063
- completedItem ,
2064
- exeContext ,
2065
- itemType ,
2066
- fieldNodes ,
2067
- itemPath ,
2068
- asyncPayloadRecord ,
2069
- ) ;
2044
+ completedItem = catchAfter ( completedItem , ( rawError ) => {
2045
+ const errors = asyncPayloadRecord ?. errors ?? exeContext . errors ;
2046
+ const error = locatedError ( rawError , fieldNodes , pathToArray ( itemPath ) ) ;
2047
+ const handledError = handleFieldError ( error , itemType , errors ) ;
2048
+ filterSubsequentPayloads ( exeContext , itemPath , asyncPayloadRecord ) ;
2049
+ return handledError ;
2050
+ } ) ;
2070
2051
}
2071
2052
return { done : false , value : completedItem } ;
2072
2053
} catch ( rawError ) {
0 commit comments