微信小程序 - 本地时效缓存(时间戳 s)

859 阅读1分钟

微信小程序缓存是永久缓存无法进行定时的,只有在用户主动删除或因存储空间原因被系统清理,否则数据都一直可用。这也就造成了有些定时触发的场景不适应。

提示:Taro换成wx就可以直接使用

环境

  1. taro 3.6.8
  2. 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
}