x-mini
Version:
133 lines (121 loc) • 2.85 kB
JavaScript
// 小程序的 storage 方法使用不完全一致,所以放在项目中引用
// import native from '../src/mini/native';
const noop = () => {};
let inited;
// 数据都存在这里
let storageData = {};
// let me = {};
// wxapp 本地数据存储的大小限制为 10MB
const {
setStorage,
setStorageSync,
getStorage,
getStorageSync,
removeStorage,
removeStorageSync,
clearStorage,
clearStorageSync,
getStorageInfo,
getStorageInfoSync,
} = typeof my !== 'undefined' ? my : wx;
// let storageData = getStorageSync({ key: 'storageData' }).data || {};
// console.log('storageData');
// console.log(storageData);
// const storageInfo = getStorageInfoSync();
// const {
// keys,
// currentSize,
// limitSize,
// } = storageInfo;
// console.log(storageInfo)
// storageInfo.keys().forEach((key, index) => {
// console.log(key);
// })
// const cache = {
// set(key, value, time) {
// },
// get(key) {
// return cache
// },
// data: getStorageSync('storageData').data || {},
// };
let i = 1;
class Storage {
constructor(store = 'x-mini') {
this.store = store || `store-${i++}`;
let data = {};
if (typeof my !== 'undefined') {
// aliapp
data = getStorageSync({ key: this.store }).data || {};
} else {
// wxapp
data = getStorageSync(this.store) || {};
}
storageData[this.store] = data;
}
set(key, value, time = 600) {
// 单位秒
const timeout = Date.now() - 1 + time * 1000;
console.log(timeout);
const data = {
value,
timeout,
};
Object.assign(storageData[this.store], {
[`${key}`]: data,
});
// console.log(JSON.stringify(storageData[this.store]));
setStorage({
key: this.store,
data: storageData[this.store],
success(res) {
console.log('数据缓存成功');
console.log(res);
},
});
}
get(key) {
if (!key) return;
const temp = storageData[this.store][key] || {}
// 缓存不存在
if (!temp.timeout || !temp.value) return null;
const now = Date.now();
if (temp.timeout && temp.timeout < now) {
// 缓存过期
this.remove(key);
return '';
}
return temp.value;
}
remove(key) {
if (!key) return;
delete storageData[this.store][key];
setStorage({
key: this.store,
data: storageData[this.store],
success(res) {
},
});
// removeStorage({
// key,
// });
}
clear(bool) {
if (!(bool === true)) {
storageData[this.store] = {};
return removeStorage({
key: this.store,
});
} else {
storageData = {};
clearStorage();
}
}
getStorageInfo() {
return getStorageInfo()
}
}
const storage = new Storage();
// export default storage
exports.storage = storage;
exports.Storage = Storage;