X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fseekat;a=blobdiff_plain;f=lib%2FAPI%2FInvoker.php;h=c36315eca0c18a4f71bb697bbddf80ff668ce681;hp=ff3a91e04a7fc7c7d977cc3e78a886e161f020ff;hb=3958595e9ff27162ae918db1453ddecd4840d481;hpb=0dcd2b11631fcf57602514e13fae9d31bbb79000 diff --git a/lib/API/Invoker.php b/lib/API/Invoker.php index ff3a91e..c36315e 100644 --- a/lib/API/Invoker.php +++ b/lib/API/Invoker.php @@ -4,11 +4,12 @@ namespace seekat\API; use Generator; use http\Client; -use React\Promise\Deferred; -use React\Promise\PromiseInterface; -use React\Promise\ExtendedPromiseInterface; - -use function React\Promise\all; +use React\Promise\{ + Deferred, + ExtendedPromiseInterface, + PromiseInterface, + function all +}; class Invoker extends Deferred { @@ -32,7 +33,7 @@ class Invoker extends Deferred /** * Create a new generator invoker - * @param \http\Client $client + * @param Client $client */ function __construct(Client $client) { $this->client = $client; @@ -45,8 +46,8 @@ class Invoker extends Deferred /** * Invoke $generator to create a \Generator which yields promises * - * @param callable $generator as function() : \Generator, creating a generator yielding promises - * @return \seekat\API\Invoker + * @param callable $generator as function():\Generator, creating a generator yielding promises + * @return Invoker */ function invoke(callable $generator) : Invoker { $this->iterate($generator()); @@ -56,8 +57,8 @@ class Invoker extends Deferred /** * Iterate over $gen, a \Generator yielding promises * - * @param \Generator $gen - * @return \seekat\API\Invoker + * @param Generator $gen + * @return Invoker */ function iterate(Generator $gen) : Invoker { $this->cancelled = false; @@ -66,7 +67,7 @@ class Invoker extends Deferred if ($this->cancelled) { break; } - $this->queue($promise, $gen); + $this->give($promise, $gen); } if (!$this->cancelled) { @@ -77,8 +78,8 @@ class Invoker extends Deferred /** * Get the generator's result - * - * @return \React\Promise\ExtendedPromiseInterface + * + * @return ExtendedPromiseInterface */ function result() : ExtendedPromiseInterface { return $this->promise(); @@ -86,25 +87,21 @@ class Invoker extends Deferred /** * Promise handler - * - * @param \React\Promise\PromiseInterface $promise - * @param \Generator $to + * + * @param array|PromiseInterface $promise + * @param Generator $gen */ - private function give(PromiseInterface $promise, Generator $to) { - $promise->then(function($result) use($to) { - if (($promise = $to->send($result))) { - $this->queue($promise, $to); - } - }); - } - - private function queue($promise, Generator $gen) { + private function give($promise, Generator $gen) { if ($promise instanceof PromiseInterface) { - $this->give($promise, $gen); + $promise->then(function($result) use($gen) { + if (($promise = $gen->send($result))) { + $this->give($promise, $gen); + } + }); } else { all($promise)->then(function($results) use($gen) { if (($promise = $gen->send($results))) { - $this->queue($promise, $gen); + $this->give($promise, $gen); } }); }