GraphQL\Executor\Executor::executeFieldsSerially PHP Method

executeFieldsSerially() private static method

Implements the "Evaluating selection sets" section of the spec for "write" mode.
private static executeFieldsSerially ( ExecutionContext $exeContext, ObjectType $parentType, $sourceValue, $path, $fields ) : GraphQL\Executor\Promise\Promise | stdClass | array
$exeContext ExecutionContext
$parentType GraphQL\Type\Definition\ObjectType
$sourceValue
$path
$fields
return GraphQL\Executor\Promise\Promise | stdClass | array
    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);
    }