2016-06-19 14 views
1

Ich möchte etwas in einer Schleife tun, während ein guzzle Anfrage passiert und dann einfach weiter das Skript, wenn die Anforderung endet, zum Beispiel ich, so etwas tun:Wie kann man warten, bis die Aufforderung zum Frittieren während des Wartens abgeschlossen wird?

$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); 
} 

und diesen Code nur Drucke "Für immer warten. Wie kann ich das erreichen?

Antwort

3

War auf der Suche nach der gleichen Antwort, also hier ist, was ich gefunden habe, müssen Sie tick die Curl-Anfrage (so dass Anfrage (n) sind eigentlich Prozesse).

Arbeitsbeispiel:

$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. 
} 

ich diesen Code zusammen, nachdem sich mit diesem Thema suchen: https://github.com/guzzle/guzzle/issues/1127

Verwandte Themen