Server IP : 127.0.0.2 / Your IP : 18.118.253.134 Web Server : Apache/2.4.18 (Ubuntu) System : User : www-data ( ) PHP Version : 7.0.33-0ubuntu0.16.04.16 Disable Function : disk_free_space,disk_total_space,diskfreespace,dl,exec,fpaththru,getmyuid,getmypid,highlight_file,ignore_user_abord,leak,listen,link,opcache_get_configuration,opcache_get_status,passthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,php_uname,phpinfo,posix_ctermid,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix,_getppid,posix_getpwnam,posix_getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_setpgid,posix_setsid,posix_setuid,posix_times,posix_ttyname,posix_uname,pclose,popen,proc_open,proc_close,proc_get_status,proc_nice,proc_terminate,shell_exec,source,show_source,system,virtual MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /var/www/html/vendor/guzzlehttp/ringphp/src/Future/ |
Upload File : |
<?php namespace GuzzleHttp\Ring\Future; use GuzzleHttp\Ring\Exception\CancelledFutureAccessException; use GuzzleHttp\Ring\Exception\RingException; use React\Promise\PromiseInterface; /** * Implements common future functionality built on top of promises. */ trait BaseFutureTrait { /** @var callable */ private $waitfn; /** @var callable */ private $cancelfn; /** @var PromiseInterface */ private $wrappedPromise; /** @var \Exception Error encountered. */ private $error; /** @var mixed Result of the future */ private $result; private $isRealized = false; /** * @param PromiseInterface $promise Promise to shadow with the future. * @param callable $wait Function that blocks until the deferred * computation has been resolved. This * function MUST resolve the deferred value * associated with the supplied promise. * @param callable $cancel If possible and reasonable, provide a * function that can be used to cancel the * future from completing. */ public function __construct( PromiseInterface $promise, callable $wait = null, callable $cancel = null ) { $this->wrappedPromise = $promise; $this->waitfn = $wait; $this->cancelfn = $cancel; } public function wait() { if (!$this->isRealized) { $this->addShadow(); if (!$this->isRealized && $this->waitfn) { $this->invokeWait(); } if (!$this->isRealized) { $this->error = new RingException('Waiting did not resolve future'); } } if ($this->error) { throw $this->error; } return $this->result; } public function promise() { return $this->wrappedPromise; } public function then( callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null ) { return $this->wrappedPromise->then($onFulfilled, $onRejected, $onProgress); } public function cancel() { if (!$this->isRealized) { $cancelfn = $this->cancelfn; $this->waitfn = $this->cancelfn = null; $this->isRealized = true; $this->error = new CancelledFutureAccessException(); if ($cancelfn) { $cancelfn($this); } } } private function addShadow() { // Get the result and error when the promise is resolved. Note that // calling this function might trigger the resolution immediately. $this->wrappedPromise->then( function ($value) { $this->isRealized = true; $this->result = $value; $this->waitfn = $this->cancelfn = null; }, function ($error) { $this->isRealized = true; $this->error = $error; $this->waitfn = $this->cancelfn = null; } ); } private function invokeWait() { try { $wait = $this->waitfn; $this->waitfn = null; $wait(); } catch (\Exception $e) { // Defer can throw to reject. $this->error = $e; $this->isRealized = true; } } }