php 版的promise 异步回调

//首先定义一个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);
              }

}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值