0

Guzzle 6を使用 して非同期リクエストを呼び出し、次にReact Promise/Deferredおよび Event loop を使用し、php-react-blockを使用して解決済みの結果を取得します。

まず、次のように http Request を送信します。

public function callService($endpoint){
    $requestDeferred = new React\Promise\Deferred();
    $requestParams = new Request("POST", $endpoint, $header, $message);
    $client = new Client();//Guzzle  http client
    $client->sendAsync($requestParams)->then(
        function (ResponseInterface $res) use($requestDeferred) {
            // $res->getStatusCode() . "\n";
            $requestDeferred->resolve($res->getBody()->getContents());
        }, 
        function (RequestException $e) use($requestDeferred) {
            $requestDeferred->reject();
        }
    );
    return $requestDeferred->promise();
}

このメソッドを次のように呼び出した後

$loop = React\EventLoop\Factory::create();
$requestPromise = $this->callService( $endpoint);
$responseXml = Clue\React\Block\await($requestPromise, $loop);// I want to block/wait to until promise is resolved and get resolved value.

しかし、 Clue\React\Block\await($requestPromise, $loop) を呼び出すと、システムが無限にループし、約束を解決できません。また、関連イベント(LibEvent)のrunメソッドにqueue->run()メソッドを追加しました。しかし、システムはまだ無限にループしています。

システムが無限にループするのはなぜですか?

助けてくれてありがとう

4

0 に答える 0