code: private function completeListValue(ListOfType $returnType, $fieldNodes, ResolveInfo $info, $path, &$result)
      {
          $itemType = $returnType->getWrappedType();
          Utils::invariant(
              is_array($result) || $result instanceof Traversable,
              'User Error: expected iterable, but did not find one for field ' . $info->parentType . '.' . $info->fieldName . '.'
          );
          $containsPromise = false;
          $i               = 0;
          $completedItems  = [];
          foreach ($result as $item) {
              $fieldPath     = $path;
              $fieldPath[]   = $i++;
              $completedItem = $this->completeValueCatchingError($itemType, $fieldNodes, $info, $fieldPath, $item);
              if (! $containsPromise && $this->getPromise($completedItem)) {
                  $containsPromise = true;
              }
              $completedItems[] = $completedItem;
          }
  
          return $containsPromise ? $this->exeContext->promises->all($completedItems) : $completedItems;
      }
docs: Complete a list value by completing each item in the list with the
  inner type
  
  @param FieldNode[] $fieldNodes
  @param mixed[]     $path
  @param mixed       $result
  
  @return mixed[]|Promise
  
  @throws Exception