From 9835aa16b786831d3cf3f66aacbd247a2d81d09d Mon Sep 17 00:00:00 2001 From: Wang Guan Date: Mon, 1 Sep 2025 01:11:31 +0900 Subject: [PATCH 1/2] provide abortSignal to useAsyncEffect() --- src/react/hook/use-async-effect.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/react/hook/use-async-effect.ts b/src/react/hook/use-async-effect.ts index 3ae039e..34bf444 100644 --- a/src/react/hook/use-async-effect.ts +++ b/src/react/hook/use-async-effect.ts @@ -7,16 +7,24 @@ export function useAsyncEffect( effectCallback: ( running: RefObject, released: PromiseLike, + abortSignal: AbortSignal, ) => Promise, deps?: DependencyList, ): void { useEffect(() => { const mounted = { current: true }; const effectReleased = new Deferred(true); + let abortController: AbortController = null!; + try { + if (effectCallback.length >= 3) { + abortController = new AbortController(); + } + } catch (ignored: unknown) { + } nextTick .then(() => { if (!mounted.current) return; - return effectCallback(mounted, effectReleased); + return effectCallback(mounted, effectReleased, abortController?.signal); }) .catch((e) => { console.error('useAsyncEffect error', e); @@ -25,6 +33,7 @@ export function useAsyncEffect( return () => { effectReleased.fulfill(undefined); mounted.current = false; + abortController?.abort(); }; }, deps); } From e751439ee27efab576fed6a6e990cd28e25e8827 Mon Sep 17 00:00:00 2001 From: Wang Guan Date: Mon, 1 Sep 2025 01:13:55 +0900 Subject: [PATCH 2/2] make linter happy --- src/react/hook/use-async-effect.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/react/hook/use-async-effect.ts b/src/react/hook/use-async-effect.ts index 34bf444..7b2c988 100644 --- a/src/react/hook/use-async-effect.ts +++ b/src/react/hook/use-async-effect.ts @@ -19,8 +19,7 @@ export function useAsyncEffect( if (effectCallback.length >= 3) { abortController = new AbortController(); } - } catch (ignored: unknown) { - } + } catch (ignored: unknown) {} nextTick .then(() => { if (!mounted.current) return;