微信小程序缓存是永久缓存无法进行定时的,只有在用户主动删除或因存储空间原因被系统清理,否则数据都一直可用。这也就造成了有些定时触发的场景不适应。
提示:Taro换成wx就可以直接使用
环境
- taro 3.6.8
- typescript 5.0.4
代码
import Taro from '@tarojs/taro'
const postfix = '_lapse_time'
/**
* 设置时效缓存
* @param key 缓存key值
* @param value 缓存数据
* @param second 缓存时效时间(单位:秒,不填则默认3600s)
*/
export const setStorageSyncSecond = <T>(key: string, value: T, second = 3600) => {
Taro.setStorageSync(key, value)
if (!second) {
Taro.removeStorageSync(`${key}${postfix}`)
return
}
const timestamp = Date.parse(String(new Date())) / 1000 + second
Taro.setStorageSync(`${key}${postfix}`, timestamp)
}
/**
* 读取缓存,若缓存不存在,返回null
* @param key 缓存key
*/
export const getStorageSyncTime = <T>(key: string): T | null => {
const deadTime = Taro.getStorageSync(`${key}${postfix}`)
const currentSecond = Date.parse(String(new Date())) / 1000
if (deadTime && deadTime < currentSecond) {
Taro.removeStorageSync(key)
Taro.removeStorageSync(`${key}${postfix}`)
return null
}
const data = Taro.getStorageSync(key)
return data || null
}