friendship ended with social-app. php is my new best friend
1<?php
2
3namespace React\Promise;
4
5/**
6 * @template T
7 */
8final class Deferred
9{
10 /**
11 * @var PromiseInterface<T>
12 */
13 private $promise;
14
15 /** @var callable(T):void */
16 private $resolveCallback;
17
18 /** @var callable(\Throwable):void */
19 private $rejectCallback;
20
21 /**
22 * @param (callable(callable(T):void,callable(\Throwable):void):void)|null $canceller
23 */
24 public function __construct(?callable $canceller = null)
25 {
26 $this->promise = new Promise(function ($resolve, $reject): void {
27 $this->resolveCallback = $resolve;
28 $this->rejectCallback = $reject;
29 }, $canceller);
30 }
31
32 /**
33 * @return PromiseInterface<T>
34 */
35 public function promise(): PromiseInterface
36 {
37 return $this->promise;
38 }
39
40 /**
41 * @param T $value
42 */
43 public function resolve($value): void
44 {
45 ($this->resolveCallback)($value);
46 }
47
48 public function reject(\Throwable $reason): void
49 {
50 ($this->rejectCallback)($reason);
51 }
52}