Не уверен, что вы не получите ошибку, но ваш генератор определенно не так.
use Psr\Http\Message\ResponseInterface;
use function GuzzleHttp\Promise\each_limit_all;
$promises = function () use ($userUrls) {
foreach ($userUrls as $user) {
yield $this->client->getAsync($user->pivot->url)
->then(function (ResponseInterface $response) use ($user) {
$this->dom->load((string)$response->getBody());
// ... some db stuff that inserts row in table for this
// $user with stuff from this request
});
};
};
$all = each_limit_all($promises(), 4);
$all->promise()->wait();
Примечание foreach
вместо $userUrls->each()
, это важно, потому что в вашей версии генераторной функции является функция, которая передается вызову ->each()
, а не та, которую вы назначаете $promise
.
Также обратите внимание, что вы должны активировать генератор (вызовите $promises()
, чтобы передать результат, а не передавать саму функцию в Guzzle).
В противном случае все выглядит хорошо, попробуйте код с моими изменениями.