From 698b2bde6b84cabc3f696c98be7ff4ca2d61fb3d Mon Sep 17 00:00:00 2001 From: Felix Ranesberger Date: Thu, 15 Jan 2026 11:04:31 +0100 Subject: [PATCH] feat: allow signal effect to clean-up inside callback function --- signals.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/signals.js b/signals.js index 06d3b52..99d704f 100644 --- a/signals.js +++ b/signals.js @@ -13,9 +13,16 @@ export class Signal extends EventTarget { } effect(fn) { - fn(); - this.addEventListener('change', fn); - return () => this.removeEventListener('change', fn); + const controller = new AbortController() + const cleanup = () => controller.abort() + + fn(cleanup) + this.addEventListener( + 'change', + () => fn(cleanup), { signal: controller.signal } + ) + + return cleanup } valueOf () { return this.#value; }