Skip to content

Commit 91a88f5

Browse files
committed
Revert "Some refactoring to prevent infinite loops"
This reverts commit 60a4379. Conflicts: src/React/Promise/Deferred.php
1 parent c6c759d commit 91a88f5

1 file changed

Lines changed: 27 additions & 52 deletions

File tree

src/React/Promise/Deferred.php

Lines changed: 27 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -12,56 +12,36 @@ class Deferred implements PromiseInterface, ResolverInterface
1212

1313
public function then($fulfilledHandler = null, $errorHandler = null, $progressHandler = null)
1414
{
15+
if (null !== $this->completed) {
16+
return $this->completed->then($fulfilledHandler, $errorHandler, $progressHandler);
17+
}
18+
1519
$deferred = new static();
1620

17-
if (null !== $this->completed) {
18-
$completed = $this->completed;
19-
20-
$this->executeCallback(function () use ($completed, $fulfilledHandler, $errorHandler, $deferred) {
21-
$completed
22-
->then($fulfilledHandler, $errorHandler)
23-
->then(
24-
function ($value) use ($deferred) {
25-
$deferred->resolve($value);
26-
},
27-
function ($reason) use ($deferred) {
28-
$deferred->reject($reason);
29-
},
30-
function ($update) use ($deferred) {
31-
$deferred->progress($update);
32-
}
33-
);
34-
});
35-
} else {
36-
if ($progressHandler) {
37-
$progHandler = function ($update) use ($deferred, $progressHandler) {
38-
try {
39-
$deferred->progress(call_user_func($progressHandler, $update));
40-
} catch (\Exception $e) {
41-
$deferred->progress($e);
42-
}
43-
};
44-
} else {
45-
$progHandler = array($deferred, 'progress');
46-
}
47-
48-
$this->handlers[] = function ($promise) use ($fulfilledHandler, $errorHandler, $deferred, $progHandler) {
49-
$promise
50-
->then($fulfilledHandler, $errorHandler)
51-
->then(
52-
function ($value) use ($deferred) {
53-
$deferred->resolve($value);
54-
},
55-
function ($reason) use ($deferred) {
56-
$deferred->reject($reason);
57-
},
58-
$progHandler
59-
);
21+
if ($progressHandler) {
22+
$progHandler = function ($update) use ($deferred, $progressHandler) {
23+
try {
24+
$deferred->progress(call_user_func($progressHandler, $update));
25+
} catch (\Exception $e) {
26+
$deferred->progress($e);
27+
}
6028
};
61-
62-
$this->progressHandlers[] = $progHandler;
29+
} else {
30+
$progHandler = array($deferred, 'progress');
6331
}
6432

33+
$this->handlers[] = function ($promise) use ($fulfilledHandler, $errorHandler, $deferred, $progHandler) {
34+
$promise
35+
->then($fulfilledHandler, $errorHandler)
36+
->then(
37+
array($deferred, 'resolve'),
38+
array($deferred, 'reject'),
39+
$progHandler
40+
);
41+
};
42+
43+
$this->progressHandlers[] = $progHandler;
44+
6545
return $deferred->promise();
6646
}
6747

@@ -80,7 +60,7 @@ public function resolve($result = null)
8060

8161
$this->progressHandlers = $this->handlers = array();
8262

83-
return $this->promise();
63+
return $this->completed;
8464
}
8565

8666
public function reject($reason = null)
@@ -118,12 +98,7 @@ public function resolver()
11898
protected function processQueue($queue, $value)
11999
{
120100
foreach ($queue as $handler) {
121-
$this->executeCallback($handler, array($value));
101+
call_user_func($handler, $value);
122102
}
123103
}
124-
125-
protected function executeCallback($callback, array $args = array())
126-
{
127-
call_user_func_array($callback, $args);
128-
}
129104
}

0 commit comments

Comments
 (0)