Guzzle 6 promise 到底什么时候解决?

When exactly does the Guzzle 6 promise resolve?

我们正在开发一个基于 Guzzle 6 的 PHP 客户端,用于响应时间合理的情况。

Guzzle 可以做到 async requests via curl 那 return 一个承诺 API。因为 body 可以作为流检索,所以我想知道承诺是否已解决(例如通过 wait() 强制执行)

a) 何时收到最后一个 header(如 on_headers hook)?

b) body 何时完全收到?

我试图在 Guzzle 来源中找到答案,但我惨遭失败。

答案是选项b

如果您使用的是默认的基于 Curl 的调用,则承诺在 curl 调用完成后才会生效。在 CurlHandler 的 __invoke:

curl_exec($easy->handle);
...
return CurlFactory::finish($this, $easy, $this->factory);

哪个returns:

return new FulfilledPromise($easy->response);

CurlMultiHandler 存在类似的代码。 on_headers 函数中的承诺没有得到解决,所以大概是在主体完成时。我相信这些流实际上是 memory/disk-based,而不是基于网络的。

如果你仔细想想,这是有道理的;在您知道所有数据下载正常之前,您不应该成功解决承诺。