@@ -108,16 +108,32 @@ export function createModel<S extends object>(
108108 const staleTimeoutIdRecord = { } as Record < string , number > ;
109109 const isStaleRecord = { } as Record < string , boolean > ;
110110
111+ /**
112+ * instead of recording the whole data, we only record the pages number to save the memory usage
113+ */
114+ const infiniteAccessorPageNumRecord = { } as Record < string , number | undefined > ;
115+
111116 function assertDuplicateName ( name : string ) {
112117 if ( objectKeys ( creatorRecord ) . includes ( name ) ) {
113118 throw new Error ( `The creator name: ${ name } has already existed!` ) ;
114119 }
115120 }
116121
117- /**
118- * instead of recording the whole data, we only record the pages number to save the memory usage
119- */
120- const infiniteAccessorPageNumRecord = { } as Record < string , number | undefined > ;
122+ function compositeSetStale ( key : string ) {
123+ return function setStale ( staleTime : number ) {
124+ const timeoutId = staleTimeoutIdRecord [ key ] ;
125+ clearTimeout ( timeoutId ) ;
126+ // reset the stale state
127+ isStaleRecord [ key ] = false ;
128+ if ( staleTime === 0 ) {
129+ isStaleRecord [ key ] = true ;
130+ } else if ( staleTime > 0 ) {
131+ staleTimeoutIdRecord [ key ] = window . setTimeout ( ( ) => {
132+ isStaleRecord [ key ] = true ;
133+ } , staleTime ) ;
134+ }
135+ } ;
136+ }
121137
122138 const updateState : UpdateModelState < S > = ( fn , { serverStateKey, ...ctx } ) => {
123139 if ( isServer ( ) ) {
@@ -203,19 +219,7 @@ export function createModel<S extends object>(
203219 onMount,
204220 onUnmount,
205221 isAuto : action . isAuto ?? false ,
206- setStaleTime ( staleTime ) {
207- const timeoutId = staleTimeoutIdRecord [ key ] ;
208- clearTimeout ( timeoutId ) ;
209- // reset the stale state
210- isStaleRecord [ key ] = false ;
211- if ( staleTime === 0 ) {
212- isStaleRecord [ key ] = true ;
213- } else if ( staleTime > 0 ) {
214- staleTimeoutIdRecord [ key ] = window . setTimeout ( ( ) => {
215- isStaleRecord [ key ] = true ;
216- } , staleTime ) ;
217- }
218- } ,
222+ setStaleTime : compositeSetStale ( key ) ,
219223 getIsStale ( ) {
220224 return isStaleRecord [ key ] ?? false ;
221225 } ,
@@ -265,6 +269,10 @@ export function createModel<S extends object>(
265269 let timeoutId : number | undefined ;
266270 const main = ( arg : Arg ) => {
267271 const key = getKey ( name , arg ) ;
272+ const accessor = accessorRecord [ key ] ;
273+ if ( accessor ) {
274+ return accessor as InfiniteAccessor < S , Arg , Data , E > ;
275+ }
268276
269277 const clearAccessorCache = ( ) => {
270278 const accessor = accessorRecord [ key ] as InfiniteAccessor < S > ;
@@ -294,19 +302,7 @@ export function createModel<S extends object>(
294302 onUnmount,
295303 initialPageNum : infiniteAccessorPageNumRecord [ key ] ?? 1 ,
296304 isAuto : action . isAuto ?? false ,
297- setStaleTime ( staleTime ) {
298- const timeoutId = staleTimeoutIdRecord [ key ] ;
299- clearTimeout ( timeoutId ) ;
300- // reset the stale state
301- isStaleRecord [ key ] = false ;
302- if ( staleTime === 0 ) {
303- isStaleRecord [ key ] = true ;
304- } else if ( staleTime > 0 ) {
305- staleTimeoutIdRecord [ key ] = window . setTimeout ( ( ) => {
306- isStaleRecord [ key ] = true ;
307- } , staleTime ) ;
308- }
309- } ,
305+ setStaleTime : compositeSetStale ( key ) ,
310306 getIsStale ( ) {
311307 return isStaleRecord [ key ] ?? false ;
312308 } ,
@@ -320,10 +316,7 @@ export function createModel<S extends object>(
320316 // Remove the clear cache timeout since the accessor is being used.
321317 window . clearTimeout ( timeoutId ) ;
322318 timeoutId = window . setTimeout ( clearAccessorCache , CLEAR_ACCESSOR_CACHE_TIME ) ;
323- const accessor = accessorRecord [ key ] ;
324- if ( accessor ) {
325- return accessor as InfiniteAccessor < S , Arg , Data , E > ;
326- }
319+
327320 const newAccessor = new InfiniteAccessor ( constructorArgs ) ;
328321 accessorRecord [ key ] = newAccessor ;
329322 return newAccessor ;
0 commit comments