promise() * @see PromiseResolver * @phpstan-param PromiseSharedData $shared */ public function __construct(private PromiseSharedData $shared){} /** * @phpstan-param \Closure(TValue) : void $onSuccess * @phpstan-param \Closure() : void $onFailure */ public function onCompletion(\Closure $onSuccess, \Closure $onFailure) : void{ $state = $this->shared->state; if($state === true){ $onSuccess($this->shared->result); }elseif($state === false){ $onFailure(); }else{ $this->shared->onSuccess[spl_object_id($onSuccess)] = $onSuccess; $this->shared->onFailure[spl_object_id($onFailure)] = $onFailure; } } public function isResolved() : bool{ //TODO: perhaps this should return true when rejected? currently there's no way to tell if a promise was //rejected or just hasn't been resolved yet return $this->shared->state === true; } }