1010 */
1111final class Promise implements PromiseInterface
1212{
13- /** @var ? callable */
13+ /** @var ( callable(callable(T):void,callable(\Throwable):void):void)|null */
1414 private $ canceller ;
1515
1616 /** @var ?PromiseInterface<T> */
1717 private $ result ;
1818
19- /** @var callable[] */
19+ /** @var list< callable(PromiseInterface<T>):void> */
2020 private $ handlers = [];
2121
2222 /** @var int */
@@ -25,6 +25,10 @@ final class Promise implements PromiseInterface
2525 /** @var bool */
2626 private $ cancelled = false ;
2727
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+ */
2832 public function __construct (callable $ resolver , callable $ canceller = null )
2933 {
3034 $ this ->canceller = $ canceller ;
@@ -57,7 +61,7 @@ public function then(callable $onFulfilled = null, callable $onRejected = null):
5761
5862 return new static (
5963 $ this ->resolver ($ onFulfilled , $ onRejected ),
60- static function () use (&$ parent ) {
64+ static function () use (&$ parent ): void {
6165 assert ($ parent instanceof self);
6266 --$ parent ->requiredCancelRequests ;
6367
@@ -78,7 +82,7 @@ static function () use (&$parent) {
7882 */
7983 public function catch (callable $ onRejected ): PromiseInterface
8084 {
81- return $ this ->then (null , static function ($ reason ) use ($ onRejected ) {
85+ return $ this ->then (null , static function (\ Throwable $ reason ) use ($ onRejected ) {
8286 if (!_checkTypehint ($ onRejected , $ reason )) {
8387 return new RejectedPromise ($ reason );
8488 }
@@ -92,12 +96,12 @@ public function catch(callable $onRejected): PromiseInterface
9296
9397 public function finally (callable $ onFulfilledOrRejected ): PromiseInterface
9498 {
95- return $ this ->then (static function ($ value ) use ($ onFulfilledOrRejected ) {
99+ return $ this ->then (static function ($ value ) use ($ onFulfilledOrRejected ): PromiseInterface {
96100 return resolve ($ onFulfilledOrRejected ())->then (function () use ($ value ) {
97101 return $ value ;
98102 });
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 {
101105 return new RejectedPromise ($ reason );
102106 });
103107 });
@@ -164,12 +168,12 @@ public function always(callable $onFulfilledOrRejected): PromiseInterface
164168
165169 private function resolver (callable $ onFulfilled = null , callable $ onRejected = null ): callable
166170 {
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 {
169173 $ promise = $ promise ->then ($ onFulfilled , $ onRejected );
170174
171175 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 {
173177 $ promise ->then ($ resolve , $ reject );
174178 };
175179 } else {
@@ -237,6 +241,9 @@ private function unwrap(PromiseInterface $promise): PromiseInterface
237241 return $ promise ;
238242 }
239243
244+ /**
245+ * @param callable(callable(mixed):void,callable(\Throwable):void):void $cb
246+ */
240247 private function call (callable $ cb ): void
241248 {
242249 // Explicitly overwrite argument with null value. This ensure that this
@@ -274,13 +281,13 @@ private function call(callable $cb): void
274281 $ target =& $ this ;
275282
276283 $ callback (
277- static function ($ value ) use (&$ target ) {
284+ static function ($ value ) use (&$ target ): void {
278285 if ($ target !== null ) {
279286 $ target ->settle (resolve ($ value ));
280287 $ target = null ;
281288 }
282289 },
283- static function (\Throwable $ reason ) use (&$ target ) {
290+ static function (\Throwable $ reason ) use (&$ target ): void {
284291 if ($ target !== null ) {
285292 $ target ->reject ($ reason );
286293 $ target = null ;
0 commit comments