Deferred.php 1.0 KB

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