diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2023-09-11 14:55:18 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2023-09-11 14:55:18 +0900 |
| commit | 25e030a7074f8e00cfbdaf85e491b9b22886991d (patch) | |
| tree | dc65176bd88a68f64d907c2bb5a41b3fda1c0a5c /packages/frontend/src/scripts/cache.ts | |
| parent | feat: テスト通知を送信できるようにする (#11810) (diff) | |
| download | sharkey-25e030a7074f8e00cfbdaf85e491b9b22886991d.tar.gz sharkey-25e030a7074f8e00cfbdaf85e491b9b22886991d.tar.bz2 sharkey-25e030a7074f8e00cfbdaf85e491b9b22886991d.zip | |
enhance(frontend): improve some caches
Diffstat (limited to 'packages/frontend/src/scripts/cache.ts')
| -rw-r--r-- | packages/frontend/src/scripts/cache.ts | 46 |
1 files changed, 7 insertions, 39 deletions
diff --git a/packages/frontend/src/scripts/cache.ts b/packages/frontend/src/scripts/cache.ts index 0dda203ef0..12347cf4b1 100644 --- a/packages/frontend/src/scripts/cache.ts +++ b/packages/frontend/src/scripts/cache.ts @@ -9,9 +9,11 @@ export class Cache<T> { private cachedAt: number | null = null; public value = ref<T | undefined>(); private lifetime: number; + private fetcher: () => Promise<T>; - constructor(lifetime: Cache<never>['lifetime']) { + constructor(lifetime: Cache<never>['lifetime'], fetcher: () => Promise<T>) { this.lifetime = lifetime; + this.fetcher = fetcher; } public set(value: T): void { @@ -35,51 +37,17 @@ export class Cache<T> { /** * キャッシュがあればそれを返し、無ければfetcherを呼び出して結果をキャッシュ&返します - * optional: キャッシュが存在してもvalidatorでfalseを返すとキャッシュ無効扱いにします */ - public async fetch(fetcher: () => Promise<T>, validator?: (cachedValue: T) => boolean): Promise<T> { + public async fetch(): Promise<T> { const cachedValue = this.get(); if (cachedValue !== undefined) { - if (validator) { - if (validator(cachedValue)) { - // Cache HIT - return cachedValue; - } - } else { - // Cache HIT - return cachedValue; - } + // Cache HIT + return cachedValue; } // Cache MISS - const value = await fetcher(); + const value = await this.fetcher(); this.set(value); return value; } - - /** - * キャッシュがあればそれを返し、無ければfetcherを呼び出して結果をキャッシュ&返します - * optional: キャッシュが存在してもvalidatorでfalseを返すとキャッシュ無効扱いにします - */ - public async fetchMaybe(fetcher: () => Promise<T | undefined>, validator?: (cachedValue: T) => boolean): Promise<T | undefined> { - const cachedValue = this.get(); - if (cachedValue !== undefined) { - if (validator) { - if (validator(cachedValue)) { - // Cache HIT - return cachedValue; - } - } else { - // Cache HIT - return cachedValue; - } - } - - // Cache MISS - const value = await fetcher(); - if (value !== undefined) { - this.set(value); - } - return value; - } } |