import { useEffect, useState } from 'react'; export function useAsync(factory: () => Promise, deps: unknown[]) { const [data, setData] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { let active = true; setLoading(true); setError(null); factory() .then((result) => { if (active) { setData(result); } }) .catch((caught: Error) => { if (active) { setError(caught.message); } }) .finally(() => { if (active) { setLoading(false); } }); return () => { active = false; }; }, deps); return { data, loading, error }; }