Skip to content

Commit d171b67

Browse files
committed
perf: introduce completePromisedListItemValue
1 parent 5a03a02 commit d171b67

File tree

1 file changed

+49
-12
lines changed

1 file changed

+49
-12
lines changed

src/execution/execute.ts

Lines changed: 49 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1108,19 +1108,17 @@ async function completeAsyncIteratorValue(
11081108
/* c8 ignore start */
11091109
if (isPromise(item)) {
11101110
completedResults.push(
1111-
completePromisedValue(
1111+
completePromisedListItemValue(
1112+
item,
1113+
acc,
11121114
exeContext,
11131115
itemType,
11141116
fieldGroup,
11151117
info,
11161118
itemPath,
1117-
item,
11181119
incrementalContext,
11191120
deferMap,
1120-
).then((resolved) => {
1121-
appendNewIncrementalDataRecords(acc, resolved[1]);
1122-
return resolved[0];
1123-
}),
1121+
),
11241122
);
11251123
containsPromise = true;
11261124
} else if (
@@ -1237,19 +1235,17 @@ function completeListValue(
12371235

12381236
if (isPromise(item)) {
12391237
completedResults.push(
1240-
completePromisedValue(
1238+
completePromisedListItemValue(
1239+
item,
1240+
acc,
12411241
exeContext,
12421242
itemType,
12431243
fieldGroup,
12441244
info,
12451245
itemPath,
1246-
item,
12471246
incrementalContext,
12481247
deferMap,
1249-
).then((resolved) => {
1250-
appendNewIncrementalDataRecords(acc, resolved[1]);
1251-
return resolved[0];
1252-
}),
1248+
),
12531249
);
12541250
containsPromise = true;
12551251
} else if (
@@ -1348,6 +1344,47 @@ function completeListItemValue(
13481344
return false;
13491345
}
13501346

1347+
async function completePromisedListItemValue(
1348+
item: unknown,
1349+
parent: GraphQLResult<Array<unknown>>,
1350+
exeContext: ExecutionContext,
1351+
itemType: GraphQLOutputType,
1352+
fieldGroup: FieldGroup,
1353+
info: GraphQLResolveInfo,
1354+
itemPath: Path,
1355+
incrementalContext: IncrementalContext | undefined,
1356+
deferMap: ReadonlyMap<DeferUsage, DeferredFragmentRecord> | undefined,
1357+
): Promise<unknown> {
1358+
try {
1359+
const resolved = await item;
1360+
let completed = completeValue(
1361+
exeContext,
1362+
itemType,
1363+
fieldGroup,
1364+
info,
1365+
itemPath,
1366+
resolved,
1367+
incrementalContext,
1368+
deferMap,
1369+
);
1370+
if (isPromise(completed)) {
1371+
completed = await completed;
1372+
}
1373+
appendNewIncrementalDataRecords(parent, completed[1]);
1374+
return completed[0];
1375+
} catch (rawError) {
1376+
handleFieldError(
1377+
rawError,
1378+
exeContext,
1379+
itemType,
1380+
fieldGroup,
1381+
itemPath,
1382+
incrementalContext,
1383+
);
1384+
return null;
1385+
}
1386+
}
1387+
13511388
/**
13521389
* Complete a Scalar or Enum by serializing to a valid value, returning
13531390
* null if serialization is not possible.

0 commit comments

Comments
 (0)