@@ -73,9 +73,33 @@ function reject(\Throwable $reason): PromiseInterface
73
73
*/
74
74
function all (array $ promisesOrValues ): PromiseInterface
75
75
{
76
- return map ($ promisesOrValues , function ($ val ) {
77
- return $ val ;
78
- });
76
+ if (!$ promisesOrValues ) {
77
+ return resolve ([]);
78
+ }
79
+
80
+ $ cancellationQueue = new Internal \CancellationQueue ();
81
+
82
+ return new Promise (function ($ resolve , $ reject ) use ($ promisesOrValues , $ cancellationQueue ): void {
83
+ $ toResolve = \count ($ promisesOrValues );
84
+ $ values = [];
85
+
86
+ foreach ($ promisesOrValues as $ i => $ promiseOrValue ) {
87
+ $ cancellationQueue ->enqueue ($ promiseOrValue );
88
+ $ values [$ i ] = null ;
89
+
90
+ resolve ($ promiseOrValue )
91
+ ->done (
92
+ function ($ mapped ) use ($ i , &$ values , &$ toResolve , $ resolve ): void {
93
+ $ values [$ i ] = $ mapped ;
94
+
95
+ if (0 === --$ toResolve ) {
96
+ $ resolve ($ values );
97
+ }
98
+ },
99
+ $ reject
100
+ );
101
+ }
102
+ }, $ cancellationQueue );
79
103
}
80
104
81
105
/**
@@ -168,49 +192,6 @@ function any(array $promisesOrValues): PromiseInterface
168
192
}, $ cancellationQueue );
169
193
}
170
194
171
- /**
172
- * Traditional map function, similar to `array_map()`, but allows input to contain
173
- * promises and/or values, and `$mapFunc` may return either a value or a promise.
174
- *
175
- * The map function receives each item as argument, where item is a fully resolved
176
- * value of a promise or value in `$promisesOrValues`.
177
- *
178
- * @param array $promisesOrValues
179
- * @param callable $mapFunc
180
- * @return PromiseInterface
181
- */
182
- function map (array $ promisesOrValues , callable $ mapFunc ): PromiseInterface
183
- {
184
- if (!$ promisesOrValues ) {
185
- return resolve ([]);
186
- }
187
-
188
- $ cancellationQueue = new Internal \CancellationQueue ();
189
-
190
- return new Promise (function ($ resolve , $ reject ) use ($ promisesOrValues , $ mapFunc , $ cancellationQueue ): void {
191
- $ toResolve = \count ($ promisesOrValues );
192
- $ values = [];
193
-
194
- foreach ($ promisesOrValues as $ i => $ promiseOrValue ) {
195
- $ cancellationQueue ->enqueue ($ promiseOrValue );
196
- $ values [$ i ] = null ;
197
-
198
- resolve ($ promiseOrValue )
199
- ->then ($ mapFunc )
200
- ->done (
201
- function ($ mapped ) use ($ i , &$ values , &$ toResolve , $ resolve ): void {
202
- $ values [$ i ] = $ mapped ;
203
-
204
- if (0 === --$ toResolve ) {
205
- $ resolve ($ values );
206
- }
207
- },
208
- $ reject
209
- );
210
- }
211
- }, $ cancellationQueue );
212
- }
213
-
214
195
/**
215
196
* @internal
216
197
*/
0 commit comments