@@ -12,66 +12,43 @@ 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
6848 public function resolve ($ result = null )
6949 {
7050 if (null !== $ this ->completed ) {
71- $ deferred = new static ();
72- $ deferred ->resolve ($ result );
73-
74- return $ deferred ->promise ();
51+ return Util::promiseFor ($ result );
7552 }
7653
7754 $ this ->completed = Util::promiseFor ($ result );
@@ -80,7 +57,7 @@ public function resolve($result = null)
8057
8158 $ this ->progressHandlers = $ this ->handlers = array ();
8259
83- return $ this ->promise () ;
60+ return $ this ->completed ;
8461 }
8562
8663 public function reject ($ reason = null )
@@ -118,12 +95,7 @@ public function resolver()
11895 protected function processQueue ($ queue , $ value )
11996 {
12097 foreach ($ queue as $ handler ) {
121- $ this -> executeCallback ($ handler , array ( $ value) );
98+ call_user_func ($ handler , $ value );
12299 }
123100 }
124-
125- protected function executeCallback ($ callback , array $ args = array ())
126- {
127- call_user_func_array ($ callback , $ args );
128- }
129101}
0 commit comments