本地缓存添加分类空间
本地缓存受同源策略影响,同一域名端口下只能存在一个缓存,使用uni.setStorageSync甚至本地缓存时,如果是数字,会将值以对象的形式存入缓存,type为number,data为数字。借此引发一些思考,这里提供一个可参考的方法来添加分类空间。
// expire:number:过期时间,单位为秒
// space:string:分类空间
const setItem = (key, value, expire = 0, space = '') => {
if (value === '' || value === null || value === undefined) {
value = null
}
let data = {
value: value
}
// 第三个参数为空,则为常规的本地缓存
if (!expire) {
setStorage(key, data)
return
}
// 参数三为字符数则是分类空间
if (typeof expire === 'string') {
let newSpace = getStorage(expire)
newSpace[key] = data
setStorage(expire, newSpace)
return
}
// 过期时间,设置当前时间expire秒后过期时间
if (isNaN(expire) || expire < 0) {
throw new Error('expire必须为正整数')
}
let time = new Date().getTime() + expire * 1000
time && data.expire = time
if (space) {
// 将数据存放在分类空姐中,直接存会覆盖原空间缓存
let newSpace = getStorage(space)
newSpace[key] = data
setStorage(space, newSpace)
}else{
setStorage(key, data)
}
}