compatibility with 2.6.0 and 3.1.0
[m6w6/seekat] / lib / API / Invoker.php
index ff3a91e04a7fc7c7d977cc3e78a886e161f020ff..c36315eca0c18a4f71bb697bbddf80ff668ce681 100644 (file)
@@ -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);
                                }
                        });
                }