From 9f24cf7e72a729946e606105b48f12dd953fad5a Mon Sep 17 00:00:00 2001 From: Samuel Sampson Date: Tue, 17 Aug 2021 21:28:58 +0000 Subject: [PATCH] Cancel queued refreshes in TimeBasedDebouncer on dispose --- src/browser/TimeBasedDebouncer.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/browser/TimeBasedDebouncer.ts b/src/browser/TimeBasedDebouncer.ts index e4aeb387..455621d7 100644 --- a/src/browser/TimeBasedDebouncer.ts +++ b/src/browser/TimeBasedDebouncer.ts @@ -20,12 +20,18 @@ export class TimeBasedDebouncer implements IRenderDebouncer { // Whether a trailing refresh should be triggered due to a refresh request that was throttled private _additionalRefreshRequested = false; + private _refreshTimeoutID: number | undefined; + constructor( private _renderCallback: (start: number, end: number) => void ) { } - public dispose(): void {} + public dispose(): void { + if (this._refreshTimeoutID) { + clearTimeout(this._refreshTimeoutID); + } + } public refresh(rowStart: number | undefined, rowEnd: number | undefined, rowCount: number): void { this._rowCount = rowCount; @@ -49,7 +55,7 @@ export class TimeBasedDebouncer implements IRenderDebouncer { const waitPeriodBeforeTrailingRefresh = RENDER_DEBOUNCE_THRESHOLD_MS - elapsed; this._additionalRefreshRequested = true; - setTimeout(() => { + this._refreshTimeoutID = window.setTimeout(() => { this._lastRefreshMs = Date.now(); this._innerRefresh(); this._additionalRefreshRequested = false;