From fe59c17d3e6964ab37ba2c6c0c171b1e5eded945 Mon Sep 17 00:00:00 2001 From: fupeng Date: Wed, 17 Mar 2021 15:23:21 +0800 Subject: [PATCH] fix(timeoutmap): expirationTime --- src/function/timeout-map.ts | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/function/timeout-map.ts b/src/function/timeout-map.ts index 6148260..629b27d 100644 --- a/src/function/timeout-map.ts +++ b/src/function/timeout-map.ts @@ -12,14 +12,13 @@ type TimeoutMapOptions = { /** * delete handler */ - onTimeout?: (key: K, value: V, map: TimeoutMap) => void; + onTimeout?: (key: K, value: V, options: TimeoutMapKeyArgs, map: TimeoutMap) => void; }; interface TimeoutMapKeyArgs { timeout: ReturnType; expirationTime: number; options: TimeoutMapOptions; - onTimeout?: (key: K, value: V, map: TimeoutMap) => void; } class TimeoutMap extends Map { @@ -83,7 +82,7 @@ class TimeoutMap extends Map { } else { this._setKeyArgs(key, { timeout: setTimeout(() => { - _options?.onTimeout?.(key, super.get(key)!, this); + _options?.onTimeout?.(key, super.get(key)!, this._keyArgs.get(key)!, this); this.delete(key); }, _options.timeout), }); @@ -91,11 +90,11 @@ class TimeoutMap extends Map { }; private _checkExpirationData() { - for (const [k, arg] of this._keyArgs) { - if (arg.expirationTime && arg.expirationTime > Date.now().valueOf()) { - this._keyArgs.delete(k); - arg?.onTimeout?.(k, super.get(k)!, this); - this.delete(k); + for (const [key, arg] of this._keyArgs) { + if (arg.expirationTime && arg.expirationTime < Date.now().valueOf()) { + arg.options?.onTimeout?.(key, super.get(key)!, this._keyArgs.get(key)!, this); + this._keyArgs.delete(key); + this.delete(key); } } }