From 32801e9fe3d5557f8fe11553ba3b0c403fc21f01 Mon Sep 17 00:00:00 2001 From: Eduardo Speroni Date: Mon, 16 Nov 2020 13:35:43 -0300 Subject: [PATCH] feat(timer): setInterval closer to web spec --- packages/core/timer/index.android.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/core/timer/index.android.ts b/packages/core/timer/index.android.ts index 06d42d958..c272228af 100644 --- a/packages/core/timer/index.android.ts +++ b/packages/core/timer/index.android.ts @@ -58,12 +58,16 @@ export function setInterval(callback: Function, milliseconds = 0, ...args): numb const handler = timeoutHandler; const invoke = () => callback(...args); const zoneBound = zonedCallback(invoke); + const start = Date.now(); + function nextCallMs() { + return milliseconds > 0 ? milliseconds - ((Date.now() - start) % milliseconds) : milliseconds; + } const runnable = new java.lang.Runnable({ run: () => { zoneBound(); if (timeoutCallbacks[id]) { - handler.postDelayed(runnable, long(milliseconds)); + handler.postDelayed(runnable, long(nextCallMs())); } }, }); @@ -72,7 +76,7 @@ export function setInterval(callback: Function, milliseconds = 0, ...args): numb timeoutCallbacks[id] = runnable; } - timeoutHandler.postDelayed(runnable, long(milliseconds)); + timeoutHandler.postDelayed(runnable, long(nextCallMs())); return id; }