diff --git a/graphql_server/lib/graphql_server.dart b/graphql_server/lib/graphql_server.dart index 6e97dd65..33c6a534 100644 --- a/graphql_server/lib/graphql_server.dart +++ b/graphql_server/lib/graphql_server.dart @@ -327,23 +327,23 @@ class GraphQL { var groupedFieldSet = collectFields(document, objectType, selectionSet, variableValues); var resultMap = {}; + var futureResultMap = >{}; for (var responseKey in groupedFieldSet.keys) { var fields = groupedFieldSet[responseKey]; - for (var field in fields) { var fieldName = field.field.fieldName.alias?.name ?? field.field.fieldName.name; - var responseValue; + FutureOr futureResponseValue; if (fieldName == '__typename') { - responseValue = objectType.name; + futureResponseValue = objectType.name; } else { var fieldType = objectType.fields .firstWhere((f) => f.name == fieldName, orElse: () => null) ?.type; if (fieldType == null) continue; - responseValue = await executeField( + futureResponseValue = executeField( document, fieldName, objectType, @@ -355,10 +355,12 @@ class GraphQL { globalVariables); } - resultMap[responseKey] = responseValue; + futureResultMap[responseKey] = futureResponseValue; } } - + for (var f in futureResultMap.keys) { + resultMap[f] = await futureResultMap[f]; + } return resultMap; } @@ -534,13 +536,18 @@ class GraphQL { } var innerType = fieldType.ofType; - var out = []; + var futureOut = []; for (var resultItem in (result as Iterable)) { - out.add(await completeValue(document, '(item in "$fieldName")', + futureOut.add(completeValue(document, '(item in "$fieldName")', innerType, fields, resultItem, variableValues, globalVariables)); } + var out = []; + for (var f in futureOut) { + out.add(await f); + } + return out; }