UNPKG

backsplash-app

Version:
43 lines (37 loc) 946 B
import { useEffect } from "react"; /** * A hook that allows using async functions in useEffect * * @param effect - Async function to run * @param deps - Dependency array, similar to useEffect * @param onError - Optional error handler */ export function useAsyncEffect( effect: () => Promise<void | (() => void)>, deps: React.DependencyList = [], onError?: (error: unknown) => void, ): void { useEffect(() => { let isMounted = true; let cleanup: void | (() => void); const runEffect = async () => { try { cleanup = await effect(); } catch (error) { if (isMounted && onError) { onError(error); } else { console.error("Error in useAsyncEffect:", error); } } }; runEffect(); return () => { isMounted = false; if (typeof cleanup === "function") { cleanup(); } }; }, deps); } export default useAsyncEffect;