|
4 | 4 |
|
5 | 5 | class When |
6 | 6 | { |
| 7 | + public static function defer() |
| 8 | + { |
| 9 | + return new Deferred(); |
| 10 | + } |
| 11 | + |
7 | 12 | public static function resolve($promiseOrValue) |
8 | 13 | { |
9 | | - $deferred = new Deferred(); |
| 14 | + $deferred = static::defer(); |
10 | 15 | $deferred->resolve($promiseOrValue); |
11 | 16 |
|
12 | 17 | return $deferred->promise(); |
@@ -41,15 +46,17 @@ public static function any($promisesOrValues, $fulfilledHandler = null, $errorHa |
41 | 46 |
|
42 | 47 | public static function some($promisesOrValues, $howMany, $fulfilledHandler = null, $errorHandler = null, $progressHandler = null) |
43 | 48 | { |
44 | | - return When::resolve($promisesOrValues)->then(function ($array) use ($howMany, $fulfilledHandler, $errorHandler, $progressHandler) { |
| 49 | + $deferredFactory = array(get_called_class(), 'defer'); |
| 50 | + |
| 51 | + return When::resolve($promisesOrValues)->then(function ($array) use ($deferredFactory, $howMany, $fulfilledHandler, $errorHandler, $progressHandler) { |
45 | 52 | if (!is_array($array)) { |
46 | 53 | $array = array(); |
47 | 54 | } |
48 | 55 |
|
49 | 56 | $len = count($array); |
50 | 57 | $toResolve = max(0, min($howMany, $len)); |
51 | 58 | $values = array(); |
52 | | - $deferred = new Deferred(); |
| 59 | + $deferred = call_user_func($deferredFactory); |
53 | 60 |
|
54 | 61 | if (!$toResolve) { |
55 | 62 | $deferred->resolve($values); |
@@ -106,14 +113,16 @@ public static function some($promisesOrValues, $howMany, $fulfilledHandler = nul |
106 | 113 |
|
107 | 114 | public static function map($promisesOrValues, $mapFunc) |
108 | 115 | { |
109 | | - return When::resolve($promisesOrValues)->then(function ($array) use ($mapFunc) { |
| 116 | + $deferredFactory = array(get_called_class(), 'defer'); |
| 117 | + |
| 118 | + return When::resolve($promisesOrValues)->then(function ($array) use ($deferredFactory, $mapFunc) { |
110 | 119 | if (!is_array($array)) { |
111 | 120 | $array = array(); |
112 | 121 | } |
113 | 122 |
|
114 | 123 | $toResolve = count($array); |
115 | 124 | $results = array(); |
116 | | - $deferred = new Deferred(); |
| 125 | + $deferred = call_user_func($deferredFactory); |
117 | 126 |
|
118 | 127 | if (!$toResolve) { |
119 | 128 | $deferred->resolve($results); |
|
0 commit comments