10
10
*/
11
11
final class Promise implements PromiseInterface
12
12
{
13
- /** @var ? callable */
13
+ /** @var ( callable(callable(T):void,callable(\Throwable):void):void)|null */
14
14
private $ canceller ;
15
15
16
16
/** @var ?PromiseInterface<T> */
17
17
private $ result ;
18
18
19
- /** @var callable[] */
19
+ /** @var list< callable(PromiseInterface<T>):void> */
20
20
private $ handlers = [];
21
21
22
22
/** @var int */
@@ -25,6 +25,10 @@ final class Promise implements PromiseInterface
25
25
/** @var bool */
26
26
private $ cancelled = false ;
27
27
28
+ /**
29
+ * @param callable(callable(T):void,callable(\Throwable):void):void $resolver
30
+ * @param (callable(callable(T):void,callable(\Throwable):void):void)|null $canceller
31
+ */
28
32
public function __construct (callable $ resolver , callable $ canceller = null )
29
33
{
30
34
$ this ->canceller = $ canceller ;
@@ -57,7 +61,7 @@ public function then(callable $onFulfilled = null, callable $onRejected = null):
57
61
58
62
return new static (
59
63
$ this ->resolver ($ onFulfilled , $ onRejected ),
60
- static function () use (&$ parent ) {
64
+ static function () use (&$ parent ): void {
61
65
assert ($ parent instanceof self);
62
66
--$ parent ->requiredCancelRequests ;
63
67
@@ -78,7 +82,7 @@ static function () use (&$parent) {
78
82
*/
79
83
public function catch (callable $ onRejected ): PromiseInterface
80
84
{
81
- return $ this ->then (null , static function ($ reason ) use ($ onRejected ) {
85
+ return $ this ->then (null , static function (\ Throwable $ reason ) use ($ onRejected ) {
82
86
if (!_checkTypehint ($ onRejected , $ reason )) {
83
87
return new RejectedPromise ($ reason );
84
88
}
@@ -92,12 +96,12 @@ public function catch(callable $onRejected): PromiseInterface
92
96
93
97
public function finally (callable $ onFulfilledOrRejected ): PromiseInterface
94
98
{
95
- return $ this ->then (static function ($ value ) use ($ onFulfilledOrRejected ) {
99
+ return $ this ->then (static function ($ value ) use ($ onFulfilledOrRejected ): PromiseInterface {
96
100
return resolve ($ onFulfilledOrRejected ())->then (function () use ($ value ) {
97
101
return $ value ;
98
102
});
99
- }, static function ($ reason ) use ($ onFulfilledOrRejected ) {
100
- return resolve ($ onFulfilledOrRejected ())->then (function () use ($ reason ) {
103
+ }, static function (\ Throwable $ reason ) use ($ onFulfilledOrRejected ): PromiseInterface {
104
+ return resolve ($ onFulfilledOrRejected ())->then (function () use ($ reason ): RejectedPromise {
101
105
return new RejectedPromise ($ reason );
102
106
});
103
107
});
@@ -164,12 +168,12 @@ public function always(callable $onFulfilledOrRejected): PromiseInterface
164
168
165
169
private function resolver (callable $ onFulfilled = null , callable $ onRejected = null ): callable
166
170
{
167
- return function ($ resolve , $ reject ) use ($ onFulfilled , $ onRejected ) {
168
- $ this ->handlers [] = static function (PromiseInterface $ promise ) use ($ onFulfilled , $ onRejected , $ resolve , $ reject ) {
171
+ return function (callable $ resolve , callable $ reject ) use ($ onFulfilled , $ onRejected ): void {
172
+ $ this ->handlers [] = static function (PromiseInterface $ promise ) use ($ onFulfilled , $ onRejected , $ resolve , $ reject ): void {
169
173
$ promise = $ promise ->then ($ onFulfilled , $ onRejected );
170
174
171
175
if ($ promise instanceof self && $ promise ->result === null ) {
172
- $ promise ->handlers [] = static function (PromiseInterface $ promise ) use ($ resolve , $ reject ) {
176
+ $ promise ->handlers [] = static function (PromiseInterface $ promise ) use ($ resolve , $ reject ): void {
173
177
$ promise ->then ($ resolve , $ reject );
174
178
};
175
179
} else {
@@ -237,6 +241,9 @@ private function unwrap(PromiseInterface $promise): PromiseInterface
237
241
return $ promise ;
238
242
}
239
243
244
+ /**
245
+ * @param callable(callable(mixed):void,callable(\Throwable):void):void $cb
246
+ */
240
247
private function call (callable $ cb ): void
241
248
{
242
249
// Explicitly overwrite argument with null value. This ensure that this
@@ -274,13 +281,13 @@ private function call(callable $cb): void
274
281
$ target =& $ this ;
275
282
276
283
$ callback (
277
- static function ($ value ) use (&$ target ) {
284
+ static function ($ value ) use (&$ target ): void {
278
285
if ($ target !== null ) {
279
286
$ target ->settle (resolve ($ value ));
280
287
$ target = null ;
281
288
}
282
289
},
283
- static function (\Throwable $ reason ) use (&$ target ) {
290
+ static function (\Throwable $ reason ) use (&$ target ): void {
284
291
if ($ target !== null ) {
285
292
$ target ->reject ($ reason );
286
293
$ target = null ;
0 commit comments