2016-06-19 9 views
1

私はがつがつ食う要求が起こっている間、ループ内で何かをしたいとの要求が終了するときにだけ、たとえば、私はこのような何かをしたい、スクリプトを継続:待機中に何か他のことをしている間にguzzle要求が完了するのを待つ方法はありますか?

$client = new \GuzzleHttp\Client(); 
$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 = \GuzzleHttp\Promise\queue(); 
    $queue->run(); 
    echo "Waiting\n"; 
    sleep(1); 
} 

と、このコードだけを印刷永遠に "待っている"。どうすればこれを達成できますか?

答えて

3

はので、ここで、同じ答えを探していた私が見つけたもので、あなたはカールの要求を(ように要求(s)は、実際に処理されている)tickする必要があります。

の作業例:

$curl = new \GuzzleHttp\Handler\CurlMultiHandler(); 
$handler = \GuzzleHttp\HandlerStack::create($curl); 
$client = new \GuzzleHttp\Client(['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 = \GuzzleHttp\Promise\queue(); 
while($promise->getState() === "pending"){ 
    $curl->tick(); 
    //echo "Waiting\n"; Commented out as it prints A LOT without sleep, but sleep slows down the rest. 
} 

私は一緒にこの問題を見た後にこのコードを配置:https://github.com/guzzle/guzzle/issues/1127

関連する問題