MCPcopy Create free account
hub / github.com/brillout/react-streaming / useAsync

Function useAsync

src/client/useAsync.ts:12–40  ·  view source on GitHub ↗
(keyValue: unknown, asyncFn: () => T)

Source from the content-addressed store, hash-verified

10const globalObject = getGlobalObject<{ suspenses: Suspenses }>('useAsync.ts', { suspenses: {} })
11
12function 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()`
43function getInitData(key: string, elementId: string): InitData | null {

Callers 4

LazyComponentFunction · 0.50
LazyComponentFunction · 0.50
MovieListFunction · 0.50
MovieListFunction · 0.50

Calls 3

assertKeyFunction · 0.85
stringifyKeyFunction · 0.85
useSuspenseFunction · 0.85

Tested by 1

LazyComponentFunction · 0.40

Used in the wild real call sites across dependent graphs

searching dependent graphs…