Skip to content

Commit 1dea38b

Browse files
committed
Add defer() method to When
1 parent 6c69ee5 commit 1dea38b

1 file changed

Lines changed: 14 additions & 5 deletions

File tree

src/React/Promise/When.php

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,14 @@
44

55
class When
66
{
7+
public static function defer()
8+
{
9+
return new Deferred();
10+
}
11+
712
public static function resolve($promiseOrValue)
813
{
9-
$deferred = new Deferred();
14+
$deferred = static::defer();
1015
$deferred->resolve($promiseOrValue);
1116

1217
return $deferred->promise();
@@ -41,15 +46,17 @@ public static function any($promisesOrValues, $fulfilledHandler = null, $errorHa
4146

4247
public static function some($promisesOrValues, $howMany, $fulfilledHandler = null, $errorHandler = null, $progressHandler = null)
4348
{
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) {
4552
if (!is_array($array)) {
4653
$array = array();
4754
}
4855

4956
$len = count($array);
5057
$toResolve = max(0, min($howMany, $len));
5158
$values = array();
52-
$deferred = new Deferred();
59+
$deferred = call_user_func($deferredFactory);
5360

5461
if (!$toResolve) {
5562
$deferred->resolve($values);
@@ -106,14 +113,16 @@ public static function some($promisesOrValues, $howMany, $fulfilledHandler = nul
106113

107114
public static function map($promisesOrValues, $mapFunc)
108115
{
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) {
110119
if (!is_array($array)) {
111120
$array = array();
112121
}
113122

114123
$toResolve = count($array);
115124
$results = array();
116-
$deferred = new Deferred();
125+
$deferred = call_user_func($deferredFactory);
117126

118127
if (!$toResolve) {
119128
$deferred->resolve($results);

0 commit comments

Comments
 (0)