diff options
Diffstat (limited to 'cloud/core/src/util')
| -rw-r--r-- | cloud/core/src/util/memo.ts | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/cloud/core/src/util/memo.ts b/cloud/core/src/util/memo.ts index 3c84cf1fb..49043010f 100644 --- a/cloud/core/src/util/memo.ts +++ b/cloud/core/src/util/memo.ts @@ -1,11 +1,18 @@ -export function memo<T>(fn: () => T) { +export function memo<T>(fn: () => T, cleanup?: (input: T) => Promise<void>) { let value: T | undefined let loaded = false - return (): T => { + const result = (): T => { if (loaded) return value as T loaded = true value = fn() return value as T } + result.reset = async () => { + if (cleanup && value) await cleanup(value) + loaded = false + value = undefined + } + + return result } |
