1
0
Fork 0

Async cleanup

This commit is contained in:
Pabloader 2026-04-20 10:27:39 +00:00
parent acf2527d7e
commit f09fce3140
1 changed files with 21 additions and 2 deletions

View File

@ -1,4 +1,23 @@
import { useEffect } from "preact/hooks"; import { useEffect } from "preact/hooks";
export const useAsyncEffect = (fx: () => any, deps: any[]) => type Cleanup = void | (() => void);
useEffect(() => void fx(), deps); type AsyncCleanup = Promise<Cleanup> | Cleanup;
export const useAsyncEffect = (fx: () => AsyncCleanup, deps: any[]) =>
useEffect(() => {
let cleanup: Cleanup;
let cancelled = false;
Promise.resolve(fx()).then((result) => {
if (cancelled) {
result?.();
} else {
cleanup = result;
}
});
return () => {
cancelled = true;
cleanup?.();
};
}, deps);