/** * @param ClientInterface $client Client used to send the requests. * @param array|\Iterator $requests Requests or functions that return * requests to send concurrently. * @param array $config Associative array of options * - concurrency: (int) Maximum number of requests to send concurrently * - options: Array of request options to apply to each request. * - fulfilled: (callable) Function to invoke when a request completes. * - rejected: (callable) Function to invoke when a request is rejected. */ public function __construct(ClientInterface $client, $requests, array $config = []) { // Backwards compatibility. if (isset($config['pool_size'])) { $config['concurrency'] = $config['pool_size']; } elseif (!isset($config['concurrency'])) { $config['concurrency'] = 25; } if (isset($config['options'])) { $opts = $config['options']; unset($config['options']); } else { $opts = []; } $iterable = \GuzzleHttp\Promise\iter_for($requests); $requests = function () use($iterable, $client, $opts) { foreach ($iterable as $key => $rfn) { if ($rfn instanceof RequestInterface) { (yield $key => $client->sendAsync($rfn, $opts)); } elseif (is_callable($rfn)) { (yield $key => $rfn($opts)); } else { throw new \InvalidArgumentException('Each value yielded by ' . 'the iterator must be a Psr7\\Http\\Message\\RequestInterface ' . 'or a callable that returns a promise that fulfills ' . 'with a Psr7\\Message\\Http\\ResponseInterface object.'); } } }; $this->each = new EachPromise($requests(), $config); }
public function testIterForReturnsIterator() { $iter = new \ArrayIterator(); $this->assertSame($iter, \GuzzleHttp\Promise\iter_for($iter)); }