我正在尝试向端点发送请求,但我不想等待他们响应,因为我不需要响应。所以我正在使用 Guzzle,方法如下:
$url = 'http://example.com';
$client = new \Guzzelhttp\Client();
$promise = $client->postAsync($url, [
'headers' => ['Some headers and authorization'],
'query' => [
'params' => 'params',
]
])->then(function ($result) {
// I don't need the result. So I just leave it here.
});
$promise->wait();
我明白了,我必须在 client
上调用 wait
方法才能真正发送请求。但这完全否定了请求是“异步”的,因为如果 url 不可访问或服务器已关闭,应用程序将等待超时或任何其他错误。
所以,这里的问题是,当您无论如何都必须等待响应时,Guzzle 所说的“异步”是什么意思?我如何使用 PHP 调用真正的异步请求?
谢谢
最佳答案
你可以做的是:
$url = 'http://example.com';
$client = new \Guzzelhttp\Client();
$promise = $client->postAsync($url, [
'headers' => ['Some headers and authorization'],
'query' => [
'params' => 'params',
]
])->then(function ($result) {
return $result->getStatusCode();
})
->wait();
echo $promise;
您需要将 wait()
作为最后一行调用,以便您获得来自您的 promise 的结果。
在这种情况下,它将只返回状态代码。
正如 Github 中提到的那样,它无法“一劳永逸”,所以我认为您正在努力实现的目标,例如 Vue 或 React 中的完整 promise 将无法按照您希望的方式为您工作.
另一种方法和我个人所做的是在 guzzle 请求上使用 try-catch
,因此如果出现 guzzle 错误,那么您将捕获它并抛出异常。
关于php - 发送 Guzzle 的 "async"请求而不调用 "wait",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56145750/