Guzzle async承诺的重点是什么?

ori*_*yan 19 php asynchronous guzzle6

有了Guzzle,承诺能提供任何实用的功能吗?看来你必须调用wait().以下代码(来自文档)似乎本身没有任何作用:

$promise = $client->requestAsync('GET', 'http://httpbin.org/get');
$promise->then(
    function (ResponseInterface $res) {
        echo $res->getStatusCode() . "\n";
    },
    function (RequestException $e) {
        echo $e->getMessage() . "\n";
        echo $e->getRequest()->getMethod();
    }
);
Run Code Online (Sandbox Code Playgroud)

如果你必须调用$ promise-> wait()来发出请求,那么承诺的重点是什么?这有什么不同于:

$request = new Request('GET', 'http://httpbin.org/get');
$response = $client->send($request); 

if ($response
Run Code Online (Sandbox Code Playgroud)

我能说的最好,唯一的好处是定义请求成功和失败回调的方便方法.甚至关于发出多个请求的doc部分也有下面的代码,它似乎阻止并执行所有请求......也许是在"同一时间".这是我应该期待的吗?

// Wait on all of the requests to complete.
$results = Promise\unwrap($promises);
Run Code Online (Sandbox Code Playgroud)

art*_*bot 11

我在这里出去了,但是从我读过的......

虽然PHP无法进行异步处理,但您可以打开多个流并处理其输入而不会阻塞.所以在你的单一连接示例中,是的,没有任何意义/好处.

但是,假设您想要加载5个资源.使用异步方法可以使这些资源基本上并行加载 - 而不是仅在第一个加载时启动第二个.

并且Guzzle提供了处理用例的方法,例如"在他们全部正确加载之后......"或"在他们全部加载或失败之后......"之后.

所以我认为它应该在处理可能同时发生的多个请求时实现更快的处理.