如何从php延期承诺中返回

如何从php延期承诺中返回,php,lumen,Php,Lumen,无法从延迟->承诺()返回值。我的控制器中有一个方法,它是一个延迟承诺,通过guzzle异步调用RESTAPI来获取数据。在控制器方法中解析延迟->承诺()时,返回不会发回数据。但是当我使用print\r时,我可以看到我需要的数据 class CharController扩展BaseController{ 公共函数getCharacters(){ $characterService=新的characterService; $characterService->getCharacters() ->

无法从
延迟->承诺()
返回值。我的控制器中有一个方法,它是一个延迟承诺,通过guzzle异步调用RESTAPI来获取数据。在控制器方法中解析
延迟->承诺()
时,返回不会发回数据。但是当我使用
print\r
时,我可以看到我需要的数据

class CharController扩展BaseController{
公共函数getCharacters(){
$characterService=新的characterService;
$characterService->getCharacters()
->然后(函数($result){
打印(结果);
返回新的响应(201,['Content-type'=>'application/json'],$result);
});
}
}
--在另一个文件中--
公共函数getCharacters(){
$deferred=新的deferred();
$client=新客户端();
$PROMITE=$client->getAsync(“https://sample.com/api/getData");
美元承诺
->然后(函数(ResponseInterface$res)使用($deferred){
$body=json_decode((字符串)$res->getBody(),true);
$deferred->resolve($body);
},函数(RequestException$e)使用($deferred){
echo$e->getMessage()。“\n”;
$deferred->reject($e);
});
$response=$promise->wait();
返回$deferred->promise();
}

我需要
CharController@getCharacters()
从api返回数据,但我没有得到响应。我可以从
print_r()

I
$promise->wait()中查看数据
将强制承诺完成,使这个极其复杂的代码完全不必要……如果我没有$PROMITE->wait(),api响应将不会被获取。请原谅我的密码。我是php新手。您建议如何重构它?除非您需要异步HTTP,否则只要
$response=$client->get($url)
将JSON字符串放入
$response
。然后您可以
返回json\u decode((string)$res->getBody(),true)getCharacters
的结尾。。。两行代码。在
CharController
do
$data=$service->getCharacters()
和bam中,您拥有您的数据。这不是JavaScript,PHP是一种简单的语言…这很有意义。我试过这个,效果很好。我尝试构建的应用程序只是调用API并获取数据。它没有数据库。所以你建议只使用同步通话?你是对的,我的想法更多地来自我的Js背景,这就是我错的地方
将强制承诺完成,使这个极其复杂的代码完全不必要……如果我没有$PROMITE->wait(),api响应将不会被获取。请原谅我的密码。我是php新手。您建议如何重构它?除非您需要异步HTTP,否则只要
$response=$client->get($url)
将JSON字符串放入
$response
。然后您可以
返回json\u decode((string)$res->getBody(),true)getCharacters
的结尾。。。两行代码。在
CharController
do
$data=$service->getCharacters()
和bam中,您拥有您的数据。这不是JavaScript,PHP是一种简单的语言…这很有意义。我试过这个,效果很好。我尝试构建的应用程序只是调用API并获取数据。它没有数据库。所以你建议只使用同步通话?你是对的,我的想法更多来自我的Js背景,这就是我错的地方。