| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 | <?phpdeclare(strict_types=1);namespace GuzzleHttp\Promise;final class Each{    /**     * Given an iterator that yields promises or values, returns a promise that     * is fulfilled with a null value when the iterator has been consumed or     * the aggregate promise has been fulfilled or rejected.     *     * $onFulfilled is a function that accepts the fulfilled value, iterator     * index, and the aggregate promise. The callback can invoke any necessary     * side effects and choose to resolve or reject the aggregate if needed.     *     * $onRejected is a function that accepts the rejection reason, iterator     * index, and the aggregate promise. The callback can invoke any necessary     * side effects and choose to resolve or reject the aggregate if needed.     *     * @param mixed $iterable Iterator or array to iterate over.     */    public static function of(        $iterable,        callable $onFulfilled = null,        callable $onRejected = null    ): PromiseInterface {        return (new EachPromise($iterable, [            'fulfilled' => $onFulfilled,            'rejected' => $onRejected,        ]))->promise();    }    /**     * Like of, but only allows a certain number of outstanding promises at any     * given time.     *     * $concurrency may be an integer or a function that accepts the number of     * pending promises and returns a numeric concurrency limit value to allow     * for dynamic a concurrency size.     *     * @param mixed        $iterable     * @param int|callable $concurrency     */    public static function ofLimit(        $iterable,        $concurrency,        callable $onFulfilled = null,        callable $onRejected = null    ): PromiseInterface {        return (new EachPromise($iterable, [            'fulfilled' => $onFulfilled,            'rejected' => $onRejected,            'concurrency' => $concurrency,        ]))->promise();    }    /**     * Like limit, but ensures that no promise in the given $iterable argument     * is rejected. If any promise is rejected, then the aggregate promise is     * rejected with the encountered rejection.     *     * @param mixed        $iterable     * @param int|callable $concurrency     */    public static function ofLimitAll(        $iterable,        $concurrency,        callable $onFulfilled = null    ): PromiseInterface {        return self::ofLimit(            $iterable,            $concurrency,            $onFulfilled,            function ($reason, $idx, PromiseInterface $aggregate): void {                $aggregate->reject($reason);            }        );    }}
 |