mpyw\Co\Co::processGeneratorContainerRunning PHP Метод

processGeneratorContainerRunning() приватный Метод

Handle resolving generators still running.
private processGeneratorContainerRunning ( GeneratorContainer $gc ) : React\Promise\PromiseInterface
$gc mpyw\Co\Internal\GeneratorContainer
Результат React\Promise\PromiseInterface
    private function processGeneratorContainerRunning(GeneratorContainer $gc)
    {
        // Check delay request yields
        if ($gc->key() === CoInterface::DELAY) {
            return $this->pool->addDelay($gc->current())->then(function () use($gc) {
                $gc->send(null);
                return $this->processGeneratorContainer($gc);
            });
        }
        // Now we normalize yielded value
        $yielded = YieldableUtils::normalize($gc->current());
        $yieldables = YieldableUtils::getYieldables($yielded, [], $this->runners);
        if (!$yieldables) {
            // If there are no yieldables, send yielded value back into generator
            $gc->send($yielded);
            // Continue
            return $this->processGeneratorContainer($gc);
        }
        // Chain resolver
        return $this->promiseAll($yieldables, $gc->key() !== CoInterface::SAFE)->then(YieldableUtils::getApplier($yielded, $yieldables, [$gc, 'send']), [$gc, 'throw_'])->then(function () use($gc, $yieldables) {
            // Continue
            $this->runners = array_diff_key($this->runners, $yieldables);
            return $this->processGeneratorContainer($gc);
        });
    }