private static function executeFieldsSerially(ExecutionContext $exeContext, ObjectType $parentType, $sourceValue, $path, $fields)
{
$results = self::$promiseAdapter->createResolvedPromise([]);
$process = function ($results, $responseName, $path, $exeContext, $parentType, $sourceValue, $fieldNodes) {
$fieldPath = $path;
$fieldPath[] = $responseName;
$result = self::resolveField($exeContext, $parentType, $sourceValue, $fieldNodes, $fieldPath);
if ($result === self::$UNDEFINED) {
return $results;
}
if (self::$promiseAdapter->isPromise($result)) {
return $result->then(function ($resolvedResult) use($responseName, $results) {
$results[$responseName] = $resolvedResult;
return $results;
});
}
$results[$responseName] = $result;
return $results;
};
foreach ($fields as $responseName => $fieldNodes) {
if (self::$promiseAdapter->isPromise($results)) {
$results = $results->then(function ($resolvedResults) use($process, $responseName, $path, $exeContext, $parentType, $sourceValue, $fieldNodes) {
return $process($resolvedResults, $responseName, $path, $exeContext, $parentType, $sourceValue, $fieldNodes);
});
} else {
$results = $process($results, $responseName, $path, $exeContext, $parentType, $sourceValue, $fieldNodes);
}
}
if (self::$promiseAdapter->isPromise($results)) {
return $results->then(function ($resolvedResults) {
return self::fixResultsIfEmptyArray($resolvedResults);
});
}
return self::fixResultsIfEmptyArray($results);
}