Приносят ли обещания реальную пользу в 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();
}
);
Если вы должны вызвать $promise->wait(), чтобы сделать запрос, какой смысл в обещании? Чем это действительно отличается от:
$request = new Request('GET', 'http://httpbin.org/get');
$response = $client->send($request);
if ($response
Насколько я могу судить, единственным преимуществом является удобный подход к определению обратных вызовов успеха и неудачи запроса. Даже в разделе документации о выполнении нескольких запросов есть приведенный ниже код, который, по-видимому, блокирует и выполняет все запросы... возможно, «в одно и то же время». Это все, что мне следует ожидать?
// Wait on all of the requests to complete.
$results = Promise\unwrap($promises);
wait()
. Таким образом, может быть некоторая правда, что некоторые из преимуществ, которые вы увидите в Javascript, не очевидны в его версии PHP (пока), но цель обещания состоит в том, что вы можете передать интерфейс только для чтения в отложенные, которые не могут быть разрешены через этот интерфейс. Возможно, это для обратной совместимости (пока). - person Jared Farrish   schedule 22.03.2016