Guzzle Http异步请求



我正试图弄清楚如何使用GuzzleHttp进行异步请求。这是代码

$page = $request->page;
$limit = $request->limit;
$pageStart = $page * $limit;
$startDate = $request->start_date;
$endDate = $request->end_date;
$query = isset($request->search) ? $request->search : "";
$user_token = Crypt::decryptString($company->persistent_user_token);
$overallRecords = [];
$client = new GuzzleHttpClient([
'base_uri' => env('BADGEBOX_BASE_URL')
]);
$promises = (function () use ($pageStart, $user_token, $client, $limit, $startDate, $endDate, $query, &$overallRecords) {
for ($page = $pageStart; $page < $limit + $pageStart; $page++) {
yield $client->getAsync(env('BADGEBOX_BASE_URL') . "/server/api/v1/company/overall?user_token=" . urlencode($user_token) . "&limit=1&page=$page&start_date=$startDate&end_date=$endDate&query=$query")->then(function ($response) use (&$overallRecords) {
dd("EXECUTED");
if (!empty(json_decode($response->getBody(), true))) {
$data = json_decode($response->getBody(), true);
foreach ($data as $record) {
$overallRecords[] = $record;
}
}
});
}
})();
$eachPromise = new GuzzleHttpPromiseEachPromise($promises, [
'concurrency' => 10,
'fulfilled' => function ($overallJson) {
},
'rejected' => function ($reason) {
}
]);
$eachPromise->promise()->wait();
dd("NOT EXECUTED");

异步调用从不执行。每次我执行代码时,它都会转储";未执行";应该在所有异步调用之后打印。在异步调用内部,我打印";执行";,而这从未被打印过。我的代码出了什么问题?

Guzzle上的异步方法并不是真正的异步。您需要使用$promise->wait((发送请求并等待结果。因此,您不能启动请求而忘记响应。

请参阅https://github.com/guzzle/guzzle/issues/1429

我试着按照别人的建议使用一个非常低的超时,但它只触发了一个ConnectException。

最新更新