//首先定义一个promise基础方法
/**
* 异步请求
* @author JuZi
* @blog https://blog.csdn.net/juziaixiao
* @version 1.0.0
* @datetime 2021-05-13 14:26:03 +0800
* @param string $url
* @param string $json
* @param callable $resolve 请求成功回调方法
* @param callable $reject 请求失败回调方法
* @return object
*/
function PromiseRequest($url='',$json='',$resolve=null,$reject=null){
$client = new \GuzzleHttp\Client();
$request = new \GuzzleHttp\Psr7\Request('post', $url);
$promise = $client->sendAsync($request,['json'=>true,'body'=>$json])
->then($resolve??$resolve,$reject??$reject);
$promise->wait();
return $promise;
}
在其他类中调用
class Test{
//定义一个接受回调结果的属性
private static $tempinfo=null;
//定义回调方法:方法中将请求结果赋值给tempinfo
/**
* 获取匿名回调方法
* @author JuZi
* @blog https://blog.csdn.net/juziaixiao
* @version 1.0.0
* @datetime 2021-05-13 15:26:19 +0800
* @param array $logdata
* @return callable
*/
private static function GetCallBack($logdata){
$func_callback = function($body) use($logdata) {
$remainingBytes = $body->getContents();
$re = json_decode($remainingBytes,true);
//赋值
self::$tempinfo = $re;
//kp_service_results_logs:插入记录
$status = 0;
if (self::$tempinfo['code']==200&&isset(self::$tempinfo['data']))
{
$status = 1;
}
$logdata['status']=$status;
$logdata['response']=json_encode(self::$tempinfo);
KpServiceResultLogs::create($logdata);
if ($status!=1)
{
throw new BaseException(['code'=>400,'msg'=>$re['message']]);
}
};
return $func_callback;
}
//使用promise
public function test($tax){
$logdata = ['apply_id'=>$tax->Id,'sid'=>$tax->sid,'result'=>json_encode($tax),'source'=>5];
$func_callback = self::GetCallBack($logdata);
$url='Http://aaaaaa'
//执行第一次请求
PromiseRequest($url,json_encode($tax),$func_callback);
//获取回调结果
$re = self::$tempinfo;
//判断是否需要通用查询
if (isset($re['data']['code'])&&$re['data']['code']=='00002')
{
$url = 'http://XXXXXX';
$logdata = ['apply_id'=>15,'sid'=>0,'result'=>'','source'=>6];
$func_callback = self::GetCallBack($logdata);
PromiseRequest($url,json_encode(['sid'=>$re['data']['sid'],'token'=>self::$token]),$func_callback);
}
}
}