use Viewi\Components\Services\ClientTimer; ... class ClientTimer { public static function setTimeoutStatic(callable $action, int $milliseconds): int; public function setTimeout(callable $action, int $milliseconds): int; public static function clearTimeoutStatic(int $timerId); public function clearTimeout(int $timerId); public static function setIntervalStatic(callable $action, int $milliseconds): int; public function setInterval(callable $action, int $milliseconds): int; public static function clearIntervalStatic(int $timerId); public function clearInterval(int $timerId); }
For example:
public function __init(ClientTimer $timer) { // use as injected service $this->timer = $timer; $this->timerId = $timer->setInterval(fn () => $this->tick(), 1000); } public function __destroy() { // !! Do not forget to clear interval on destroy !! $this->timer->clearInterval($this->timerId); } public function tick() { $this->seconds++; } function postValidate() { // use as static method ClientTimer::setTimeoutStatic($this->validate, 0); } ... <div> Seconds: $seconds </div>