/**
  * @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;
 }