Php 如何等待承诺在另一节课上完成

Php 如何等待承诺在另一节课上完成,php,guzzle,guzzle6,guzzlehttp,Php,Guzzle,Guzzle6,Guzzlehttp,在另一节课上,我有一个很好用的。我需要在另一个控制器中使用返回的数据,但我不知道如何在另一个控制器中等待数据: class PromiseController { private function load() { $client = new \GuzzleHttp\Client(); $promise = $client->requestAsync('POST', $url, $options); $jsonPromise

在另一节课上,我有一个很好用的。我需要在另一个控制器中使用返回的数据,但我不知道如何在另一个控制器中等待数据:

class PromiseController
{
    private function load()
    {
        $client = new \GuzzleHttp\Client();

        $promise = $client->requestAsync('POST', $url, $options);
        $jsonPromise = $promise->then(
            function (ResponseInterface $res) {
                $xml = simplexml_load_string($res->getBody(),'SimpleXMLElement',LIBXML_NOCDATA);
                $json = json_encode($xml);

                return $json;
            },
            function (RequestException $e) {
                Log::info($e->getMessage());
                echo $e->getMessage() . "\n";
                echo $e->getRequest()->getMethod();
            }
        );

        return $jsonPromise;
  }
}
类承诺控制器
{
私有函数加载()
{
$client=new\GuzzleHttp\client();
//例如,省略变量
$promise=$client->requestAsync('POST',$url,$options);
$json=null;
$PROMITE->then(
功能(响应接口$res){
$xml=simplexml\u load\u字符串($res->getBody(),'simplexmlement',LIBXML\u NOCDATA);
$json=json_encode($xml);
$json=$json;
//我在这里看到了我的json。太好了。
},
函数(请求异常$e){
日志::信息($e->getMessage());
echo$e->getMessage()。“\n”;
echo$e->getRequest()->getMethod();
}
);
$return$json;
}
}
需要数据的控制器:


//省略功能等
$data=(新PromiseController)->load();
返回数组(
“xmlAsJson”=>$data
);

返回的数据总是
null
。我需要等待“所需”控制器中的数据,但如何等待?我希望有一个单独的控制器在将结果传递到
数组之前将xml处理为json。如果要传播异步,则必须继续承诺,因此从控制器返回一个新承诺:

class PromiseController
{
    private function load()
    {
        $client = new \GuzzleHttp\Client();

        $promise = $client->requestAsync('POST', $url, $options);
        $jsonPromise = $promise->then(
            function (ResponseInterface $res) {
                $xml = simplexml_load_string($res->getBody(),'SimpleXMLElement',LIBXML_NOCDATA);
                $json = json_encode($xml);

                return $json;
            },
            function (RequestException $e) {
                Log::info($e->getMessage());
                echo $e->getMessage() . "\n";
                echo $e->getRequest()->getMethod();
            }
        );

        return $jsonPromise;
  }
}
然后调用
->wait()

$data = ( new PromiseController )->load()->wait();

return array(
    'xmlAsJson' => $data
);

太棒了,伙计!!