Merge pull request #37 from deep-gaurav/patch-1
Make fields resolution asynchronous
This commit is contained in:
commit
0a50ce1ad5
1 changed files with 15 additions and 8 deletions
|
@ -327,23 +327,23 @@ class GraphQL {
|
||||||
var groupedFieldSet =
|
var groupedFieldSet =
|
||||||
collectFields(document, objectType, selectionSet, variableValues);
|
collectFields(document, objectType, selectionSet, variableValues);
|
||||||
var resultMap = <String, dynamic>{};
|
var resultMap = <String, dynamic>{};
|
||||||
|
var futureResultMap = <String, FutureOr<dynamic>>{};
|
||||||
|
|
||||||
for (var responseKey in groupedFieldSet.keys) {
|
for (var responseKey in groupedFieldSet.keys) {
|
||||||
var fields = groupedFieldSet[responseKey];
|
var fields = groupedFieldSet[responseKey];
|
||||||
|
|
||||||
for (var field in fields) {
|
for (var field in fields) {
|
||||||
var fieldName =
|
var fieldName =
|
||||||
field.field.fieldName.alias?.name ?? field.field.fieldName.name;
|
field.field.fieldName.alias?.name ?? field.field.fieldName.name;
|
||||||
var responseValue;
|
FutureOr<dynamic> futureResponseValue;
|
||||||
|
|
||||||
if (fieldName == '__typename') {
|
if (fieldName == '__typename') {
|
||||||
responseValue = objectType.name;
|
futureResponseValue = objectType.name;
|
||||||
} else {
|
} else {
|
||||||
var fieldType = objectType.fields
|
var fieldType = objectType.fields
|
||||||
.firstWhere((f) => f.name == fieldName, orElse: () => null)
|
.firstWhere((f) => f.name == fieldName, orElse: () => null)
|
||||||
?.type;
|
?.type;
|
||||||
if (fieldType == null) continue;
|
if (fieldType == null) continue;
|
||||||
responseValue = await executeField(
|
futureResponseValue = executeField(
|
||||||
document,
|
document,
|
||||||
fieldName,
|
fieldName,
|
||||||
objectType,
|
objectType,
|
||||||
|
@ -355,10 +355,12 @@ class GraphQL {
|
||||||
globalVariables);
|
globalVariables);
|
||||||
}
|
}
|
||||||
|
|
||||||
resultMap[responseKey] = responseValue;
|
futureResultMap[responseKey] = futureResponseValue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for (var f in futureResultMap.keys) {
|
||||||
|
resultMap[f] = await futureResultMap[f];
|
||||||
|
}
|
||||||
return resultMap;
|
return resultMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -534,13 +536,18 @@ class GraphQL {
|
||||||
}
|
}
|
||||||
|
|
||||||
var innerType = fieldType.ofType;
|
var innerType = fieldType.ofType;
|
||||||
var out = [];
|
var futureOut = [];
|
||||||
|
|
||||||
for (var resultItem in (result as Iterable)) {
|
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));
|
innerType, fields, resultItem, variableValues, globalVariables));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var out = [];
|
||||||
|
for (var f in futureOut) {
|
||||||
|
out.add(await f);
|
||||||
|
}
|
||||||
|
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue