如何等待Guzzle请求在等待期间完成其他操作时完成



我想在进行guzzle请求时在循环中做某事,然后在请求结束时继续脚本,例如我想做这样的事情:

$client = new GuzzleHttpClient();
$promise = $client->headAsync("https://www.google.com");
$promise->then(
  function (ResponseInterface $res) {
    echo $res->getStatusCode() . "n";
  },
  function (RequestException $e) {
    echo $e->getMessage() . "n";
  }
);
while($promise->getState() === "pending"){
  $queue = GuzzleHttpPromisequeue();
  $queue->run();
  echo "Waitingn";
  sleep(1);
}

此代码只会打印"等待"。我该如何实现?

正在寻找相同的答案,所以这是我发现的,您需要 tick curl请求(因此请求实际上是处理)。

工作示例:

$curl = new GuzzleHttpHandlerCurlMultiHandler();
$handler = GuzzleHttpHandlerStack::create($curl);
$client = new GuzzleHttpClient(['handler' => $handler]);
$promise = $client->headAsync("https://www.google.com");
$promise->then(
  function (ResponseInterface $res) {
    echo $res->getStatusCode() . "n";
  },
  function (RequestException $e) {
    echo $e->getMessage() . "n";
  }
);
$queue = GuzzleHttpPromisequeue();
while($promise->getState() === "pending"){
  $curl->tick();
  //echo "Waitingn"; Commented out as it prints A LOT without sleep, but sleep slows down the rest.
}

查看此问题后,我将此代码放在一起:https://github.com/guzzle/guzzle/sissues/1127

最新更新