File tree 2 files changed +16
-4
lines changed
packages/property-provider/src
2 files changed +16
-4
lines changed Original file line number Diff line number Diff line change @@ -15,9 +15,10 @@ describe("memoize", () => {
15
15
16
16
describe ( "static memoization" , ( ) => {
17
17
it ( "should cache the resolved provider" , async ( ) => {
18
- expect . assertions ( repeatTimes * 2 ) ;
18
+ expect . assertions ( repeatTimes * 2 + 1 ) ;
19
19
20
20
const memoized = memoize ( provider ) ;
21
+ expect ( provider ) . toHaveBeenCalledTimes ( 0 ) ;
21
22
// eslint-disable-next-line @typescript-eslint/no-unused-vars
22
23
for ( const index in [ ...Array ( repeatTimes ) . keys ( ) ] ) {
23
24
expect ( await memoized ( ) ) . toStrictEqual ( mockReturn ) ;
@@ -51,6 +52,7 @@ describe("memoize", () => {
51
52
const isExpiredFalseTest = async ( requiresRefresh ?: any ) => {
52
53
isExpired . mockReturnValue ( false ) ;
53
54
const memoized = memoize ( provider , isExpired , requiresRefresh ) ;
55
+ expect ( provider ) . toHaveBeenCalledTimes ( 0 ) ;
54
56
// eslint-disable-next-line @typescript-eslint/no-unused-vars
55
57
for ( const index in [ ...Array ( repeatTimes ) . keys ( ) ] ) {
56
58
expect ( await memoized ( ) ) . toEqual ( mockReturn ) ;
Original file line number Diff line number Diff line change @@ -43,16 +43,26 @@ export const memoize: MemoizeOverload = <T>(
43
43
isExpired ?: ( resolved : T ) => boolean ,
44
44
requiresRefresh ?: ( resolved : T ) => boolean
45
45
) : Provider < T > => {
46
+ let result : any ;
47
+ let hasResult : boolean ;
46
48
if ( isExpired === undefined ) {
47
49
// This is a static memoization; no need to incorporate refreshing
48
- const result = provider ( ) ;
49
- return ( ) => result ;
50
+ return ( ) => {
51
+ if ( ! hasResult ) {
52
+ result = provider ( ) ;
53
+ hasResult = true ;
54
+ }
55
+ return result ;
56
+ } ;
50
57
}
51
58
52
- let result = provider ( ) ;
53
59
let isConstant = false ;
54
60
55
61
return async ( ) => {
62
+ if ( ! hasResult ) {
63
+ result = provider ( ) ;
64
+ hasResult = true ;
65
+ }
56
66
if ( isConstant ) {
57
67
return result ;
58
68
}
You can’t perform that action at this time.
0 commit comments