1 | <?php
|
---|
2 |
|
---|
3 | declare(strict_types=1);
|
---|
4 |
|
---|
5 | namespace GuzzleHttp\Promise;
|
---|
6 |
|
---|
7 | final class Each
|
---|
8 | {
|
---|
9 | /**
|
---|
10 | * Given an iterator that yields promises or values, returns a promise that
|
---|
11 | * is fulfilled with a null value when the iterator has been consumed or
|
---|
12 | * the aggregate promise has been fulfilled or rejected.
|
---|
13 | *
|
---|
14 | * $onFulfilled is a function that accepts the fulfilled value, iterator
|
---|
15 | * index, and the aggregate promise. The callback can invoke any necessary
|
---|
16 | * side effects and choose to resolve or reject the aggregate if needed.
|
---|
17 | *
|
---|
18 | * $onRejected is a function that accepts the rejection reason, iterator
|
---|
19 | * index, and the aggregate promise. The callback can invoke any necessary
|
---|
20 | * side effects and choose to resolve or reject the aggregate if needed.
|
---|
21 | *
|
---|
22 | * @param mixed $iterable Iterator or array to iterate over.
|
---|
23 | */
|
---|
24 | public static function of(
|
---|
25 | $iterable,
|
---|
26 | ?callable $onFulfilled = null,
|
---|
27 | ?callable $onRejected = null
|
---|
28 | ): PromiseInterface {
|
---|
29 | return (new EachPromise($iterable, [
|
---|
30 | 'fulfilled' => $onFulfilled,
|
---|
31 | 'rejected' => $onRejected,
|
---|
32 | ]))->promise();
|
---|
33 | }
|
---|
34 |
|
---|
35 | /**
|
---|
36 | * Like of, but only allows a certain number of outstanding promises at any
|
---|
37 | * given time.
|
---|
38 | *
|
---|
39 | * $concurrency may be an integer or a function that accepts the number of
|
---|
40 | * pending promises and returns a numeric concurrency limit value to allow
|
---|
41 | * for dynamic a concurrency size.
|
---|
42 | *
|
---|
43 | * @param mixed $iterable
|
---|
44 | * @param int|callable $concurrency
|
---|
45 | */
|
---|
46 | public static function ofLimit(
|
---|
47 | $iterable,
|
---|
48 | $concurrency,
|
---|
49 | ?callable $onFulfilled = null,
|
---|
50 | ?callable $onRejected = null
|
---|
51 | ): PromiseInterface {
|
---|
52 | return (new EachPromise($iterable, [
|
---|
53 | 'fulfilled' => $onFulfilled,
|
---|
54 | 'rejected' => $onRejected,
|
---|
55 | 'concurrency' => $concurrency,
|
---|
56 | ]))->promise();
|
---|
57 | }
|
---|
58 |
|
---|
59 | /**
|
---|
60 | * Like limit, but ensures that no promise in the given $iterable argument
|
---|
61 | * is rejected. If any promise is rejected, then the aggregate promise is
|
---|
62 | * rejected with the encountered rejection.
|
---|
63 | *
|
---|
64 | * @param mixed $iterable
|
---|
65 | * @param int|callable $concurrency
|
---|
66 | */
|
---|
67 | public static function ofLimitAll(
|
---|
68 | $iterable,
|
---|
69 | $concurrency,
|
---|
70 | ?callable $onFulfilled = null
|
---|
71 | ): PromiseInterface {
|
---|
72 | return self::ofLimit(
|
---|
73 | $iterable,
|
---|
74 | $concurrency,
|
---|
75 | $onFulfilled,
|
---|
76 | function ($reason, $idx, PromiseInterface $aggregate): void {
|
---|
77 | $aggregate->reject($reason);
|
---|
78 | }
|
---|
79 | );
|
---|
80 | }
|
---|
81 | }
|
---|