elk/composables/useCacheStorage.ts
2022-11-21 14:55:31 +08:00

28 lines
525 B
TypeScript

export function useCacheStorage<T>(
key: string,
getter: () => T | Promise<T>,
TTL = 1000 * 60 * 60 * 12, // 12 hours
) {
const storage = useLocalStorage(key, {
time: 0,
value: null as T | null,
})
if (storage.value.time + TTL < Date.now()) {
Promise.resolve(getter()).then((v) => {
storage.value = {
time: Date.now(),
value: v,
}
})
}
return computed({
get() {
return storage.value.value
},
set(v) {
storage.value.value = v
},
})
}