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
);
太棒了,伙计!!