From b58d21c0941afa9bf3cbe9c29e81058a6e1e3344 Mon Sep 17 00:00:00 2001 From: rameel Date: Sun, 5 Apr 2026 01:16:00 +0500 Subject: [PATCH] Clear timeout on dispose to prevent stale callbacks --- src/utilities/watch.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/utilities/watch.js b/src/utilities/watch.js index 3ad7d9d..1ad48ff 100644 --- a/src/utilities/watch.js +++ b/src/utilities/watch.js @@ -11,6 +11,7 @@ export function watch(get_value, callback, options = null) { let new_value; let old_value; let initialized = false; + let timer_id; const handle = effect(() => { new_value = get_value(); @@ -22,7 +23,7 @@ export function watch(get_value, callback, options = null) { if (initialized || (options?.immediate ?? true)) { // Prevent the watcher from detecting its own dependencies. - setTimeout(() => { + timer_id = setTimeout(() => { callback(new_value, old_value); old_value = new_value; }); @@ -31,5 +32,8 @@ export function watch(get_value, callback, options = null) { initialized = true; }); - return () => release(handle); + return () => { + clearTimeout(timer_id); + release(handle); + } }