*/ private array $onSuccess = []; /** * @var \Closure[] * @phpstan-var array */ private array $onFailure = []; private ?bool $success = null; /** * @phpstan-param \Closure() : void $onSuccess * @phpstan-param \Closure() : void $onFailure */ public function onCompletion(\Closure $onSuccess, \Closure $onFailure) : void{ if($this->success !== null){ $this->success ? $onSuccess() : $onFailure(); }else{ $this->onSuccess[spl_object_id($onSuccess)] = $onSuccess; $this->onFailure[spl_object_id($onFailure)] = $onFailure; } } public function resolve() : void{ $this->success = true; foreach($this->onSuccess as $callback){ $callback(); } $this->onSuccess = []; $this->onFailure = []; } public function reject() : void{ $this->success = false; foreach($this->onFailure as $callback){ $callback(); } $this->onSuccess = []; $this->onFailure = []; } public function isCompleted() : bool{ return $this->success !== null; } }