import * as React from 'react' import { useStates } from './useStates' export function useAsyncMemo( factory: (dependencies: D) => T | Promise, deps: D, initialValue: T, ): T { const firstTime = React.useRef(true) const state = useStates(() => initialValue) React.useEffect(() => { if (firstTime.current) firstTime.current = false Promise.resolve(factory(deps)).then(consumed => state.set(() => consumed)) }, deps) return state.val }