/** * @param array $requestArray * @return FutureArray */ public function __invoke(array $requestArray) { $request = new Request($requestArray['http_method'], $requestArray['url'], $requestArray['headers'], $requestArray['body'], $requestArray['version']); $ready = false; $httpRequest = $this->requestFactory->create($request, $requestArray['client'], $this->httpClient, $this->loop); return new FutureArray($httpRequest->then(function (ResponseInterface $response) use(&$ready, $requestArray) { $ready = true; $responseArray = ['effective_url' => $requestArray['url'], 'body' => $response->getBody(), 'headers' => $response->getHeaders(), 'status' => $response->getStatusCode(), 'reason' => $response->getReasonPhrase(), 'version' => $response->getProtocolVersion()]; return $responseArray; }, function ($error) use(&$ready) { $ready = true; return ['error' => $error]; }), function () use(&$ready) { do { $this->loop->tick(); } while (!$ready); }); }
/** * @param RequestInterface $request * @param array $options * @return Promise */ public function __invoke(RequestInterface $request, array $options) { $ready = false; $promise = new Promise(function () use(&$ready) { do { $this->loop->tick(); } while (!$ready); }); $this->requestFactory->create($request, $options, $this->httpClient, $this->loop)->then(function (ResponseInterface $response) use(&$ready, $promise) { $ready = true; $promise->resolve($response); $this->invokeQueue(); }, function ($error) use(&$ready, $promise) { $ready = true; $promise->reject($error); $this->invokeQueue(); }); return $promise; }