11import * as Solid from 'solid-js'
22
3- import { defer } from '@tanstack/router-core'
3+ import { TSR_DEFERRED_PROMISE , defer } from '@tanstack/router-core'
44import type { DeferredPromise } from '@tanstack/router-core'
55import type { SolidNode } from './route'
66
@@ -18,10 +18,16 @@ export function useAwaited<T>({
1818}
1919
2020function InnerAwait < T > ( props : {
21- data : Solid . Accessor < T >
21+ deferred : DeferredPromise < T >
22+ ready : Solid . Accessor < unknown >
2223 children : ( res : T ) => SolidNode
2324} ) {
24- return props . children ( props . data ( ) ) as any
25+ props . ready ( )
26+ const state = props . deferred [ TSR_DEFERRED_PROMISE ]
27+ if ( state . status === 'error' ) {
28+ throw state . error
29+ }
30+ return props . children ( state . data as T ) as any
2531}
2632
2733export function Await < T > (
@@ -30,11 +36,17 @@ export function Await<T>(
3036 children : ( result : T ) => SolidNode
3137 } ,
3238) {
33- const data = Solid . createMemo ( async ( ) => await defer ( props . promise ) )
39+ const deferred = defer ( props . promise )
40+ const ready = Solid . createMemo ( async ( ) => {
41+ await deferred
42+ return true
43+ } )
3444
3545 return (
3646 < Solid . Loading fallback = { props . fallback as any } >
37- < InnerAwait data = { data } > { props . children } </ InnerAwait >
47+ < InnerAwait deferred = { deferred } ready = { ready } >
48+ { props . children }
49+ </ InnerAwait >
3850 </ Solid . Loading >
3951 )
4052}
0 commit comments