如何从承诺函数返回(Guzzle)

时间:2018-03-05 08:28:56

标签: php guzzle

function myfunc($finalArray){

        $url = "https://reqres.in/api/users";
        $client = new GuzzleHttp\Client();
        $countOfSuccess = 0;

        $request = new \GuzzleHttp\Psr7\Request('POST', $url);

        $promise = $client->sendAsync($request)->then(function ($response) use ($finalArray,$countOfSuccess) {
            $countOfSuccess ++ ;
            echo $countOfSuccess;
            echo count($finalArray);
            if(myresponse is valid){
                return "Successfully"; // Want to return from there
            }

        });
        $promise->wait();

}

以下是if条件返回。电话会在if

内进行
if(myresponse is valid){
    return "Successfully"; // Want to return from there
}

所以这个返回不起作用,并且调用函数没有得到返回值

2 个答案:

答案 0 :(得分:0)

根据文档(https://github.com/guzzle/promises#synchronous-wait),您应该能够做到这样的事情:

$promise = $client->sendAsync($request);
$promise->then(function ($response) use ($finalArray,$countOfSuccess, &$promise) {
    $countOfSuccess ++ ;
    echo $countOfSuccess;
    echo count($finalArray);
    if(myresponse is valid){
        $promise->resolve('Success');
    }

});
echo $promise->wait(); // should return 'Success'

答案 1 :(得分:0)

  

您能告诉我如何立即获得多个异步任务的响应,或者是否有办法检查是否所有异步任务都已完成。

您可能需要all() function from Guzzle's promises library

有更多的功能可以结合并反省承诺,看看源代码。