Esempio n. 1
0
 function co($generator)
 {
     if (is_callable($generator)) {
         $args = array_slice(func_get_args(), 1);
         $generator = call_user_func_array($generator, $args);
     }
     if (!$generator instanceof \Generator) {
         return toFuture($generator);
     }
     $next = function ($yield) use($generator, &$next) {
         if ($generator->valid()) {
             return co($yield)->then(function ($value) use($generator, &$next) {
                 $yield = $generator->send($value);
                 if ($generator->valid()) {
                     return $next($yield);
                 }
                 if (method_exists($generator, "getReturn")) {
                     $result = $generator->getReturn();
                     return $result === null ? $value : $result;
                 }
                 return $value;
             }, function ($e) use($generator, &$next) {
                 return $next($generator->throw($e));
             });
         } else {
             if (method_exists($generator, "getReturn")) {
                 return value($generator->getReturn());
             } else {
                 return value(null);
             }
         }
     };
     return $next($generator->current());
 }
Esempio n. 2
0
 private function autoId()
 {
     $settings = new InvokeSettings(array('idempotent' => true, 'failswitch' => true));
     $args = array();
     return toFuture($this->invoke('#', $args, $settings));
 }
Esempio n. 3
0
 function invokeHandler($name, array &$args, stdClass $context)
 {
     if ($context->isMissingMethod) {
         $args = array($name, $args);
     }
     $passContext = $context->passContext;
     if ($passContext === null) {
         $passContext = $this->passContext;
     }
     if ($context->async) {
         $self = $this;
         return promise(function ($resolve, $reject) use($self, $passContext, &$args, $context) {
             if ($passContext) {
                 $args[] = $context;
             }
             $args[] = function ($value) use($resolve, $reject) {
                 if ($value instanceof Exception || $value instanceof Throwable) {
                     $reject($value);
                 } else {
                     $resolve($value);
                 }
             };
             $self->callService($args, $context);
         });
     } else {
         if ($passContext) {
             $args[] = $context;
         }
         return toFuture($this->callService($args, $context));
     }
 }