@@ -6,12 +6,12 @@ class When
66{
77 public static function resolve ($ promiseOrValue = null )
88 {
9- return Util:: promiseFor ($ promiseOrValue );
9+ return resolve ($ promiseOrValue );
1010 }
1111
1212 public static function reject ($ promiseOrValue = null )
1313 {
14- return Util:: rejectedPromiseFor ($ promiseOrValue );
14+ return reject ($ promiseOrValue );
1515 }
1616
1717 public static function lazy ($ factory )
@@ -21,146 +21,26 @@ public static function lazy($factory)
2121
2222 public static function all ($ promisesOrValues , $ fulfilledHandler = null , $ errorHandler = null , $ progressHandler = null )
2323 {
24- $ promise = static ::map ($ promisesOrValues , function ($ val ) {
25- return $ val ;
26- });
27-
28- return $ promise ->then ($ fulfilledHandler , $ errorHandler , $ progressHandler );
24+ return all ($ promisesOrValues )->then ($ fulfilledHandler , $ errorHandler , $ progressHandler );
2925 }
3026
3127 public static function any ($ promisesOrValues , $ fulfilledHandler = null , $ errorHandler = null , $ progressHandler = null )
3228 {
33- $ promise = static ::some ($ promisesOrValues , 1 )->then (function ($ val ) {
34- return array_shift ($ val );
35- });
36-
37- return $ promise ->then ($ fulfilledHandler , $ errorHandler , $ progressHandler );
29+ return any ($ promisesOrValues )->then ($ fulfilledHandler , $ errorHandler , $ progressHandler );
3830 }
3931
4032 public static function some ($ promisesOrValues , $ howMany , $ fulfilledHandler = null , $ errorHandler = null , $ progressHandler = null )
4133 {
42- return When::resolve ($ promisesOrValues )->then (function ($ array ) use ($ howMany , $ fulfilledHandler , $ errorHandler , $ progressHandler ) {
43- if (!is_array ($ array )) {
44- $ array = array ();
45- }
46-
47- $ len = count ($ array );
48- $ toResolve = max (0 , min ($ howMany , $ len ));
49- $ values = array ();
50- $ deferred = new Deferred ();
51-
52- if (!$ toResolve ) {
53- $ deferred ->resolve ($ values );
54- } else {
55- $ toReject = ($ len - $ toResolve ) + 1 ;
56- $ reasons = array ();
57-
58- $ progress = array ($ deferred , 'progress ' );
59-
60- $ fulfillOne = function ($ val , $ i ) use (&$ values , &$ toResolve , $ deferred ) {
61- $ values [$ i ] = $ val ;
62-
63- if (0 === --$ toResolve ) {
64- $ deferred ->resolve ($ values );
65-
66- return true ;
67- }
68- };
69-
70- $ rejectOne = function ($ reason , $ i ) use (&$ reasons , &$ toReject , $ deferred ) {
71- $ reasons [$ i ] = $ reason ;
72-
73- if (0 === --$ toReject ) {
74- $ deferred ->reject ($ reasons );
75-
76- return true ;
77- }
78- };
79-
80- foreach ($ array as $ i => $ promiseOrValue ) {
81- $ fulfiller = function ($ val ) use ($ i , &$ fulfillOne , &$ rejectOne ) {
82- $ reset = $ fulfillOne ($ val , $ i );
83-
84- if (true === $ reset ) {
85- $ fulfillOne = $ rejectOne = function () {};
86- }
87- };
88-
89- $ rejecter = function ($ val ) use ($ i , &$ fulfillOne , &$ rejectOne ) {
90- $ reset = $ rejectOne ($ val , $ i );
91-
92- if (true === $ reset ) {
93- $ fulfillOne = $ rejectOne = function () {};
94- }
95- };
96-
97- When::resolve ($ promiseOrValue )->then ($ fulfiller , $ rejecter , $ progress );
98- }
99- }
100-
101- return $ deferred ->then ($ fulfilledHandler , $ errorHandler , $ progressHandler );
102- });
34+ return some ($ promisesOrValues , $ howMany )->then ($ fulfilledHandler , $ errorHandler , $ progressHandler );
10335 }
10436
10537 public static function map ($ promisesOrValues , $ mapFunc )
10638 {
107- return When::resolve ($ promisesOrValues )->then (function ($ array ) use ($ mapFunc ) {
108- if (!is_array ($ array )) {
109- $ array = array ();
110- }
111-
112- $ toResolve = count ($ array );
113- $ results = array ();
114- $ deferred = new Deferred ();
115-
116- if (!$ toResolve ) {
117- $ deferred ->resolve ($ results );
118- } else {
119- $ resolve = function ($ item , $ i ) use ($ mapFunc , &$ results , &$ toResolve , $ deferred ) {
120- When::resolve ($ item )
121- ->then ($ mapFunc )
122- ->then (
123- function ($ mapped ) use (&$ results , $ i , &$ toResolve , $ deferred ) {
124- $ results [$ i ] = $ mapped ;
125-
126- if (0 === --$ toResolve ) {
127- $ deferred ->resolve ($ results );
128- }
129- },
130- array ($ deferred , 'reject ' )
131- );
132- };
133-
134- foreach ($ array as $ i => $ item ) {
135- $ resolve ($ item , $ i );
136- }
137- }
138-
139- return $ deferred ->promise ();
140- });
39+ return map ($ promisesOrValues , $ mapFunc );
14140 }
14241
14342 public static function reduce ($ promisesOrValues , $ reduceFunc , $ initialValue = null )
14443 {
145- return When::resolve ($ promisesOrValues )->then (function ($ array ) use ($ reduceFunc , $ initialValue ) {
146- if (!is_array ($ array )) {
147- $ array = array ();
148- }
149-
150- $ total = count ($ array );
151- $ i = 0 ;
152-
153- // Wrap the supplied $reduceFunc with one that handles promises and then
154- // delegates to the supplied.
155- $ wrappedReduceFunc = function ($ current , $ val ) use ($ reduceFunc , $ total , &$ i ) {
156- return When::resolve ($ current )->then (function ($ c ) use ($ reduceFunc , $ total , &$ i , $ val ) {
157- return When::resolve ($ val )->then (function ($ value ) use ($ reduceFunc , $ total , &$ i , $ c ) {
158- return call_user_func ($ reduceFunc , $ c , $ value , $ i ++, $ total );
159- });
160- });
161- };
162-
163- return array_reduce ($ array , $ wrappedReduceFunc , $ initialValue );
164- });
44+ return reduce ($ promisesOrValues , $ reduceFunc , $ initialValue );
16545 }
16646}
0 commit comments