php - 发送 Guzzle 的 "async"请求而不调用 "wait"

标签 php asynchronous guzzle

我正在尝试向端点发送请求,但我不想等待他们响应,因为我不需要响应。所以我正在使用 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/

相关文章:

javascript - 在 PHP 和 Javascript 中处理日期

C#:异步NamedPipeServerStream的理解

javascript - 如何等待异步函数并收集响应

php - Guzzle 指挥所数据

php - PHP:从MySQL获取JSON

php - 使用 php 上传 .docx 文件

php - SQL SUM() 和 ANGULAR.JS

javascript - 如何等待异步函数?

php - 您可以在 Guzzle POST 正文中包含原始 JSON 吗?

php - 如何使用 Guzzle PHP 获取 SENT 数据的主体?