Обратите внимание, что я также создал выпуск для соответствующего репо.
В документации говорится, что эта функция будет возвращать обещание, котороебудет решен после того, как все обещания в массиве будут разрешены.
Вот моя реализация;
private function downloadListingImages($contents)
{
$response = [];
$name = 1;
foreach ($contents['images'] as $image) {
$response[] = $this->downloadImage($image, $name);
$name++;
}
return $response;
}
private function downloadImage($link, $name)
{
$guzzle = new Client([
'handler' => HandlerStack::create(new HttpClientAdapter($this->loop)),
]);
$promise = $guzzle->getAsync($link, [
'save_to' => 'assets/' . $name . '.jpg',
]);
return $promise;
}
$promises = $this->downloadListingImages($contents);
Теперь до этого момента все в порядке.Но я хочу получить $contents
из запроса на мой сервер.Итак, у меня есть серверная реализация;
$server = new React\Http\Server(function (Psr\Http\Message\ServerRequestInterface $request) use ($promises) {
\React\Promise\all($promises)->always(function($val) {
file_put_contents('meh.txt', "meh");
});
return new React\Http\Response(
200,
array('Content-Type' => 'text/plain'),
"Hello World!\n"
);
});
То, что я ожидаю здесь, это то, что $server
возвращает немедленный ответ (что он делает), и через некоторое время вижу meh.txt
в моем репо.Тем не менее, он никогда не падает до always
обратного вызова.И даже если я не включаю никакую функцию в метод all
, он просто разрешается сам.Разве это не должно ждать, пока then
или что-то подобное не будет вызвано для разрешения?Как можно запустить асинхронную посылку обещаний и получить информацию о завершении работы?