From cb222ceb227f5a7f5307085bcbebfa3cdb049598 Mon Sep 17 00:00:00 2001 From: Parsa Ghadimi Date: Wed, 23 May 2018 23:23:41 +0430 Subject: Adds setInterval, clearInterval, clearTimeout. --- timers.ts | 48 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 3 deletions(-) (limited to 'timers.ts') diff --git a/timers.ts b/timers.ts index f5f039f1c..5407c63b0 100644 --- a/timers.ts +++ b/timers.ts @@ -4,12 +4,14 @@ import * as dispatch from "./dispatch"; let nextTimerId = 1; // tslint:disable-next-line:no-any -type TimerCallback = (...args: any[]) => void; +export type TimerCallback = (...args: any[]) => void; interface Timer { id: number; cb: TimerCallback; interval: boolean; + // tslint:disable-next-line:no-any + args: any[]; duration: number; // milliseconds } @@ -23,17 +25,26 @@ function onMessage(payload: Uint8Array) { const msg = pb.Msg.decode(payload); const { id, done } = msg.timerReady; const timer = timers.get(id); - timer.cb(); + if (!timer) { + return; + } + timer.cb(...timer.args); if (done) { timers.delete(id); } } -export function setTimeout(cb: TimerCallback, duration: number): number { +export function setTimeout( + cb: TimerCallback, + duration: number, + // tslint:disable-next-line:no-any + ...args: any[] +): number { const timer = { id: nextTimerId++, interval: false, duration, + args, cb }; timers.set(timer.id, timer); @@ -46,3 +57,34 @@ export function setTimeout(cb: TimerCallback, duration: number): number { }); return timer.id; } + +// TODO DRY with setTimeout +export function setInterval( + cb: TimerCallback, + repeat: number, + // tslint:disable-next-line:no-any + ...args: any[] +): number { + const timer = { + id: nextTimerId++, + interval: true, + duration: repeat, + args, + cb + }; + timers.set(timer.id, timer); + dispatch.sendMsg("timers", { + timerStart: { + id: timer.id, + interval: true, + duration: repeat + } + }); + return timer.id; +} + +export function clearTimer(id: number) { + dispatch.sendMsg("timers", { + timerClear: { id } + }); +} -- cgit v1.2.3