53 lines
1.6 KiB
JavaScript
53 lines
1.6 KiB
JavaScript
let timers = [];
|
||
|
||
export default {
|
||
|
||
exists(key) {
|
||
const _ = localStorage.getItem('stored_keys');
|
||
return _ ? _.split(',')?.indexOf(key) != -1 : false;
|
||
},
|
||
|
||
store(key, value, duration = null) {
|
||
if (!localStorage.getItem('stored_keys')) localStorage.setItem('stored_keys', key);
|
||
else localStorage.setItem('stored_keys', localStorage.getItem('stored_keys') + ',' + key);
|
||
|
||
localStorage.setItem(key, JSON.stringify(value));
|
||
console.log('store duration', duration)
|
||
if (duration) {
|
||
if (timers[key]) clearTimeout(timers[key]);
|
||
timers[key] = setTimeout(() => {
|
||
console.log("clear cache", key)
|
||
this.clear([key]);
|
||
}, duration * 1000);
|
||
}
|
||
},
|
||
|
||
/**
|
||
*
|
||
* @param {*} key
|
||
* @param {*} cb
|
||
* @param {*} param2 force 强制更新,调用cb
|
||
* @returns
|
||
*/
|
||
async getList(key, cb = null, { force = false, duration = null } = {}) {
|
||
if (this.exists(key) && !force) {
|
||
return JSON.parse(localStorage.getItem(key))
|
||
} else {
|
||
const list = await cb();
|
||
this.store(key, list, duration);
|
||
return list;
|
||
}
|
||
},
|
||
|
||
clear(keys) {
|
||
if (keys && keys.length) {
|
||
let stored_keys = localStorage.getItem('stored_keys').split(',');
|
||
keys.forEach((key) => {
|
||
stored_keys = stored_keys.filter((item) => item != key);
|
||
});
|
||
localStorage.setItem('stored_keys', stored_keys);
|
||
return;
|
||
}
|
||
localStorage.removeItem('stored_keys');
|
||
},
|
||
} |