(keyValue: unknown, asyncFn: () => T)
| 10 | const globalObject = getGlobalObject<{ suspenses: Suspenses }>('useAsync.ts', { suspenses: {} }) |
| 11 | |
| 12 | function useAsync<T>(keyValue: unknown, asyncFn: () => T): Awaited<T> { |
| 13 | assertKey(keyValue) |
| 14 | const key = stringifyKey(keyValue) |
| 15 | const elementId = useId() |
| 16 | |
| 17 | const resolver = async () => { |
| 18 | const value = await asyncFn() |
| 19 | return value |
| 20 | } |
| 21 | |
| 22 | const resolverSync = () => { |
| 23 | const initData = getInitData(key, elementId) |
| 24 | if (initData) { |
| 25 | const { value } = initData |
| 26 | return { value: value as Awaited<T> } |
| 27 | } |
| 28 | return null |
| 29 | } |
| 30 | |
| 31 | return useSuspense({ |
| 32 | suspenses: globalObject.suspenses, |
| 33 | resolver, |
| 34 | resolverSync, |
| 35 | key, |
| 36 | elementId, |
| 37 | needsWorkaround: true, |
| 38 | asyncFnName: asyncFn.name, |
| 39 | }) |
| 40 | } |
| 41 | |
| 42 | // See provider `provideInitData()` |
| 43 | function getInitData(key: string, elementId: string): InitData | null { |
searching dependent graphs…