style(@vben-core/shared): formatting
parent
e555ee065e
commit
51e8b27d4c
|
|
@ -308,7 +308,7 @@ await userCache.setItem('profile', {name: '张三'});
|
|||
await configCache.setItem('profile', {theme: 'dark'});
|
||||
|
||||
// 各自独立
|
||||
await userCache.getItem('profile'); // => { name: '张三' }
|
||||
await userCache.getItem('profile'); // => { name: '张三' }
|
||||
await configCache.getItem('profile'); // => { theme: 'dark' }
|
||||
|
||||
// 只清除 user 前缀的数据
|
||||
|
|
@ -325,9 +325,12 @@ const cache = new StorageManager({ prefix: 'app' });
|
|||
await cache.clearExpiredItems();
|
||||
|
||||
// 或者定时清理(每 10 分钟)
|
||||
setInterval(async () => {
|
||||
await cache.clearExpiredItems();
|
||||
}, 10 * 60 * 1000);
|
||||
setInterval(
|
||||
async () => {
|
||||
await cache.clearExpiredItems();
|
||||
},
|
||||
10 * 60 * 1000,
|
||||
);
|
||||
```
|
||||
|
||||
---
|
||||
|
|
@ -338,8 +341,8 @@ setInterval(async () => {
|
|||
|
||||
```typescript
|
||||
interface StorageItem<T> {
|
||||
expiry?: number; // 过期时间戳(毫秒),undefined 表示永不过期
|
||||
value: T; // 实际业务数据
|
||||
expiry?: number; // 过期时间戳(毫秒),undefined 表示永不过期
|
||||
value: T; // 实际业务数据
|
||||
}
|
||||
```
|
||||
|
||||
|
|
|
|||
|
|
@ -44,11 +44,7 @@ describe('storageManager', () => {
|
|||
});
|
||||
|
||||
it('should clear expired items', async () => {
|
||||
await storageManager.setItem(
|
||||
'user',
|
||||
{age: 30, name: 'John Doe'},
|
||||
1000,
|
||||
); // 1秒过期
|
||||
await storageManager.setItem('user', {age: 30, name: 'John Doe'}, 1000); // 1秒过期
|
||||
vi.advanceTimersByTime(1001); // 快进时间
|
||||
await storageManager.clearExpiredItems();
|
||||
const user = await storageManager.getItem('user');
|
||||
|
|
@ -56,11 +52,7 @@ describe('storageManager', () => {
|
|||
});
|
||||
|
||||
it('should not clear non-expired items', async () => {
|
||||
await storageManager.setItem(
|
||||
'user',
|
||||
{age: 30, name: 'John Doe'},
|
||||
10_000,
|
||||
); // 10秒过期
|
||||
await storageManager.setItem('user', {age: 30, name: 'John Doe'}, 10_000); // 10秒过期
|
||||
vi.advanceTimersByTime(5000); // 快进时间
|
||||
await storageManager.clearExpiredItems();
|
||||
const user = await storageManager.getItem('user');
|
||||
|
|
@ -87,38 +79,22 @@ describe('storageManager', () => {
|
|||
});
|
||||
|
||||
it('should remove expired items when accessed', async () => {
|
||||
await storageManager.setItem(
|
||||
'user',
|
||||
{age: 30, name: 'John Doe'},
|
||||
1000,
|
||||
); // 1秒过期
|
||||
await storageManager.setItem('user', {age: 30, name: 'John Doe'}, 1000); // 1秒过期
|
||||
vi.advanceTimersByTime(1001); // 快进时间
|
||||
const user = await storageManager.getItem('user');
|
||||
expect(user).toBeNull();
|
||||
});
|
||||
|
||||
it('should not remove non-expired items when accessed', async () => {
|
||||
await storageManager.setItem(
|
||||
'user',
|
||||
{age: 30, name: 'John Doe'},
|
||||
10_000,
|
||||
); // 10秒过期
|
||||
await storageManager.setItem('user', {age: 30, name: 'John Doe'}, 10_000); // 10秒过期
|
||||
vi.advanceTimersByTime(5000); // 快进时间
|
||||
const user = await storageManager.getItem('user');
|
||||
expect(user).toEqual({ age: 30, name: 'John Doe' });
|
||||
});
|
||||
|
||||
it('should handle multiple items with different expiry times', async () => {
|
||||
await storageManager.setItem(
|
||||
'user1',
|
||||
{age: 30, name: 'John Doe'},
|
||||
1000,
|
||||
); // 1秒过期
|
||||
await storageManager.setItem(
|
||||
'user2',
|
||||
{age: 25, name: 'Jane Doe'},
|
||||
2000,
|
||||
); // 2秒过期
|
||||
await storageManager.setItem('user1', {age: 30, name: 'John Doe'}, 1000); // 1秒过期
|
||||
await storageManager.setItem('user2', {age: 25, name: 'Jane Doe'}, 2000); // 2秒过期
|
||||
vi.advanceTimersByTime(1500); // 快进时间
|
||||
await storageManager.clearExpiredItems();
|
||||
const user1 = await storageManager.getItem('user1');
|
||||
|
|
|
|||
|
|
@ -14,7 +14,9 @@ interface LocalStorageDriverOptions {
|
|||
class LocalStorageDriver implements IStorageDriver {
|
||||
private storage: Storage;
|
||||
|
||||
constructor({storageType = 'localStorage'}: LocalStorageDriverOptions = {}) {
|
||||
constructor({
|
||||
storageType = 'localStorage',
|
||||
}: LocalStorageDriverOptions = {}) {
|
||||
this.storage =
|
||||
storageType === 'localStorage'
|
||||
? window.localStorage
|
||||
|
|
|
|||
|
|
@ -1,4 +1,8 @@
|
|||
import type {IStorageDriver, StorageItem, StorageManagerOptions} from './types';
|
||||
import type {
|
||||
IStorageDriver,
|
||||
StorageItem,
|
||||
StorageManagerOptions,
|
||||
} from './types';
|
||||
|
||||
import {LocalStorageDriver} from './local-storage-driver';
|
||||
|
||||
|
|
@ -47,7 +51,10 @@ class StorageManager {
|
|||
* @param defaultValue 当项不存在或已过期时返回的默认值
|
||||
* @returns 值,如果项已过期则返回默认值
|
||||
*/
|
||||
async getItem<T>(key: string, defaultValue: null | T = null): Promise<null | T> {
|
||||
async getItem<T>(
|
||||
key: string,
|
||||
defaultValue: null | T = null,
|
||||
): Promise<null | T> {
|
||||
const fullKey = this.getFullKey(key);
|
||||
const raw = await this.driver.getItem<StorageItem<T>>(fullKey);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue