update to current promise APIs
[m6w6/pq-gateway] / lib / pq / Query / AsyncExecutor.php
index e7c1c35998f1847a4b544ac0ece47337fc1418bc..a61f87a868cca08df0729562ba35cd43a29ad6b3 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-namespace pq\Query\Executor;
+namespace pq\Query;
 
 use \pq\Query\Executor;
 use \pq\Query\WriterInterface;
@@ -33,7 +33,7 @@ class AsyncExecutor extends Executor
         * 
         * Example with reactphp:
         * <code>
-        * use \React\Promise\Deferred;
+        * use React\Promise\Deferred;
         * 
         * $exec = new pq\Query\AsyncExecutor(new pq\Connection);
         * $exec->setCallbacks(
@@ -43,33 +43,32 @@ class AsyncExecutor extends Executor
         * },
         * # done
         * function(Deferred $context, $result) {
-        *              $context->resolver()->resolve($result);
+        *              $context->resolve($result);
         * },
         * # then
         * function(Deferred $context, callable $cb) {
-        *              return $context->then($cb);
+        *              return $context->promise()->then($cb);
         * });
         * $exec->execute($queryWriter, function($result){});
         * </code>
         * 
         * Example with amphp:
         * <code>
-        * use amp\Future;
-        * use function amp\reactor;
+        * use Amp\Deferred;
         * 
         * $exec = new pq\Query\AsyncExecutor(new pq\Connection);
         * $exec->setCallbacks(
         * # init context
         * function() {
-        *              return new Future(reactor());
+        *              return new Deferred;
         * },
         * # done
-        * function(Future $context, $result) {
+        * function(Deferred $context, $result) {
         *              $context->succeed($result);
         * },
         * # then
-        * function(Future $context, callable $cb) {
-        *              return $context->when(function ($error, $result) {
+        * function(Deferred $context, callable $cb) {
+        *              return $context->promise()->when(function($error, $result) use ($cb) {
         *                      $cb($result);
         *              });
         * });
@@ -99,29 +98,19 @@ class AsyncExecutor extends Executor
         * @param callable $callback
         * @return array($context, $resolver)
         */
-       protected function prepareCallback(callable $callback/*, ... */) {
+       protected function prepareCallbacks(callable $callback/*, ... */) {
                list($init, $done, $then) = $this->getCallbacks();
                
                $context = $init();
                foreach (func_get_args() as $cb) {
                        $then($context, $cb);
                }
-               $then($context, $callback);
                
                return array($context, function($result) use ($context, $done) {
                        $done($context, $result);
                });
        }
        
-       /**
-        * Result callback
-        * @param \pq\Result $result
-        */
-       protected function receiveResult(\pq\Result $result) {
-               $this->result = $result;
-               $this->notify();
-       }
-       
        /**
         * Execute the query asynchronously through \pq\Connection::execParamsAsync()
         * @param \pq\Query\WriterInterface $query
@@ -133,8 +122,12 @@ class AsyncExecutor extends Executor
                $this->query = $query;
                $this->notify();
                
-               list($context, $resolver) = $this->prepareCallback(
-                       array($this, "receiveResult"), $callback);
+               list($context, $resolver) = $this->prepareCallbacks(
+                       function(\pq\Result $result) {
+                               $this->result = $result;
+                               $this->notify();
+                               return $result;
+                       }, $callback);
                $this->getConnection()->execParamsAsync($query, $query->getParams(), 
                        $query->getTypes(), $resolver);
                return $context;