promise = $promise instanceof PromiseInterface ? $promise : new FulfilledPromise($promise); $this->loop = $loop; } /** * Intercept the promise then() and run it in sync. * * @param callable|null $onFulfilled * @param callable|null $onRejected * @param callable|null $onProgress * @return PromiseInterface */ public function then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null) { $result = Block\await( $this->promise, $this->loop ); if ($onFulfilled !== null) { $result = call_user_func($onFulfilled, $result); } return $result instanceof PromiseInterface ? new self($result, $this->loop) : new self(Helpers::createFulfilledPromise($result), $this->loop); } /** * Pass the calls to the promise. * * @param string $method * @param array $args * @return mixed */ public function __call($method, $args) { return call_user_func([$this->promise, $method], $args); } }