export default class Timer { divTimer!: HTMLElement; interval!: any; async start(playerIndex: number, finishTime: number): Promise { return new Promise(resolve => { if (this.interval !== undefined) this.stop(); this.divTimer = document.getElementById(`${playerIndex}-player-time`) as HTMLElement; this.interval = setInterval(() => { this.updateDisplay(finishTime - Date.now(), resolve); }, 1000); }) } updateDisplay(time: number, resolve: Function): void { let secondsElapsed = Math.floor(time / 1000); if (secondsElapsed <= 0) { resolve(); clearInterval(this.interval); this.divTimer.innerHTML = '0'; } else { this.divTimer.innerHTML = secondsElapsed.toString(); } } stop(): void { this.divTimer.innerHTML = ''; clearInterval(this.interval); this.interval = undefined; } }