diff options
author | Sebastian <sebasjm@gmail.com> | 2022-04-11 15:10:16 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2022-04-11 15:10:16 -0300 |
commit | a644efe1abe8072bc92efa6d0fefde7504563086 (patch) | |
tree | 8a6dd486d991e547d12290d2f96eb2f23d7e7d56 /packages/taler-wallet-core/src/util/timer.ts | |
parent | ccb50c636054819f5af8778cc3ebe5258b1c2e87 (diff) | |
download | wallet-core-a644efe1abe8072bc92efa6d0fefde7504563086.tar.xz |
add a timer parameter in the wallet constructor in order to resolve #7120
Diffstat (limited to 'packages/taler-wallet-core/src/util/timer.ts')
-rw-r--r-- | packages/taler-wallet-core/src/util/timer.ts | 54 |
1 files changed, 35 insertions, 19 deletions
diff --git a/packages/taler-wallet-core/src/util/timer.ts b/packages/taler-wallet-core/src/util/timer.ts index d9fe3439b..c850c663c 100644 --- a/packages/taler-wallet-core/src/util/timer.ts +++ b/packages/taler-wallet-core/src/util/timer.ts @@ -42,7 +42,7 @@ export interface TimerHandle { } class IntervalHandle { - constructor(public h: any) {} + constructor(public h: any) { } clear(): void { clearInterval(this.h); @@ -60,7 +60,7 @@ class IntervalHandle { } class TimeoutHandle { - constructor(public h: any) {} + constructor(public h: any) { } clear(): void { clearTimeout(this.h); @@ -97,20 +97,6 @@ export const performanceNow: () => bigint = (() => { return () => BigInt(0); })(); -/** - * Call a function every time the delay given in milliseconds passes. - */ -export function every(delayMs: number, callback: () => void): TimerHandle { - return new IntervalHandle(setInterval(callback, delayMs)); -} - -/** - * Call a function after the delay given in milliseconds passes. - */ -export function after(delayMs: number, callback: () => void): TimerHandle { - return new TimeoutHandle(setTimeout(callback, delayMs)); -} - const nullTimerHandle = { clear() { // do nothing @@ -125,13 +111,43 @@ const nullTimerHandle = { /** * Group of timers that can be destroyed at once. */ +export interface TimerAPI { + after(delayMs: number, callback: () => void): TimerHandle; + every(delayMs: number, callback: () => void): TimerHandle; +} + +export class SetTimeoutTimerAPI implements TimerAPI { + /** + * Call a function every time the delay given in milliseconds passes. + */ + every(delayMs: number, callback: () => void): TimerHandle { + return new IntervalHandle(setInterval(callback, delayMs)); + } + + /** + * Call a function after the delay given in milliseconds passes. + */ + after(delayMs: number, callback: () => void): TimerHandle { + return new TimeoutHandle(setTimeout(callback, delayMs)); + } + + +} + +export const timer = new SetTimeoutTimerAPI(); + +/** + * Implementation of [[TimerGroup]] using setTimeout + */ export class TimerGroup { private stopped = false; - private timerMap: { [index: number]: TimerHandle } = {}; + private readonly timerMap: { [index: number]: TimerHandle } = {}; private idGen = 1; + constructor(public readonly timerApi: TimerAPI) { } + stopCurrentAndFutureTimers(): void { this.stopped = true; for (const x in this.timerMap) { @@ -158,7 +174,7 @@ export class TimerGroup { logger.warn("dropping timer since timer group is stopped"); return nullTimerHandle; } - const h = after(delayMs, callback); + const h = this.timerApi.after(delayMs, callback); const myId = this.idGen++; this.timerMap[myId] = h; @@ -180,7 +196,7 @@ export class TimerGroup { logger.warn("dropping timer since timer group is stopped"); return nullTimerHandle; } - const h = every(delayMs, callback); + const h = this.timerApi.every(delayMs, callback); const myId = this.idGen++; this.timerMap[myId] = h; |