2022-08-01 03:47:37 +00:00
|
|
|
|
const PreLoadKeys = "$PreLoadKeys"; //Unity插件会替换这里,不要改这里
|
|
|
|
|
|
|
|
|
|
|
|
const storage = {
|
|
|
|
|
|
_cacheData:{}, //缓存数据,避免同步操作带来的卡顿
|
|
|
|
|
|
_handleList:[], //io队列,避免时序问题和同时大量的io操作
|
|
|
|
|
|
isRunning:false,
|
|
|
|
|
|
isCallDeletedAll:false,
|
|
|
|
|
|
getData(key,defaultValue){
|
|
|
|
|
|
var v = this._cacheData[key];
|
|
|
|
|
|
if(v === null){
|
|
|
|
|
|
return defaultValue;
|
|
|
|
|
|
}
|
|
|
|
|
|
if(typeof v!== 'undefined'){
|
|
|
|
|
|
return v;
|
|
|
|
|
|
}
|
|
|
|
|
|
if(this.isCallDeletedAll){
|
|
|
|
|
|
return defaultValue;
|
|
|
|
|
|
}
|
|
|
|
|
|
try {
|
|
|
|
|
|
v = wx.getStorageSync(key);
|
|
|
|
|
|
this._cacheData[key] = v !== "" ? v : null;
|
|
|
|
|
|
return v === "" ? defaultValue : v;
|
|
|
|
|
|
} catch (e) {
|
|
|
|
|
|
//console.error(e);
|
|
|
|
|
|
return defaultValue;
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
setData(key,value){
|
|
|
|
|
|
this._cacheData[key] = value;
|
|
|
|
|
|
this._handleList.push({
|
|
|
|
|
|
type:"setData",
|
|
|
|
|
|
key,
|
|
|
|
|
|
value
|
|
|
|
|
|
});
|
|
|
|
|
|
this._doRun();
|
|
|
|
|
|
},
|
|
|
|
|
|
deleteKey(key){
|
|
|
|
|
|
this._cacheData[key] = null;
|
|
|
|
|
|
this._handleList.push({
|
|
|
|
|
|
type:"deleteKey",
|
|
|
|
|
|
key
|
|
|
|
|
|
});
|
|
|
|
|
|
this._doRun();
|
|
|
|
|
|
},
|
|
|
|
|
|
deleteAll(){
|
|
|
|
|
|
for(let key in this._cacheData){
|
|
|
|
|
|
this._cacheData[key] = null;
|
|
|
|
|
|
}
|
|
|
|
|
|
this.isCallDeletedAll = true;
|
|
|
|
|
|
this._handleList.push({
|
|
|
|
|
|
type:"deleteAll"
|
|
|
|
|
|
});
|
|
|
|
|
|
this._doRun();
|
|
|
|
|
|
},
|
|
|
|
|
|
_doRun(){
|
|
|
|
|
|
if(this.isRunning || this._handleList.length === 0){
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
this.isRunning = true;
|
|
|
|
|
|
const task = this._handleList.shift();
|
|
|
|
|
|
if(task.type === 'setData'){
|
|
|
|
|
|
wx.setStorage({
|
|
|
|
|
|
key:task.key,
|
|
|
|
|
|
data:task.value,
|
|
|
|
|
|
fail:function({errMsg}){
|
|
|
|
|
|
console.error(errMsg);
|
|
|
|
|
|
},
|
|
|
|
|
|
complete:()=>{
|
|
|
|
|
|
this.isRunning = false;
|
|
|
|
|
|
this._doRun();
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
}else if(task.type === 'deleteKey'){
|
|
|
|
|
|
wx.removeStorage({
|
|
|
|
|
|
key:task.key,
|
|
|
|
|
|
fail:function({errMsg}){
|
|
|
|
|
|
console.error(errMsg);
|
|
|
|
|
|
},
|
|
|
|
|
|
complete:()=>{
|
|
|
|
|
|
this.isRunning = false;
|
|
|
|
|
|
this._doRun();
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
}else if(task.type === 'deleteAll'){
|
|
|
|
|
|
wx.clearStorage({
|
|
|
|
|
|
fail:function({errMsg}){
|
|
|
|
|
|
console.error(errMsg);
|
|
|
|
|
|
},
|
|
|
|
|
|
complete:()=>{
|
|
|
|
|
|
this.isRunning = false;
|
|
|
|
|
|
this._doRun();
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
}else{
|
|
|
|
|
|
this.isRunning = false;
|
|
|
|
|
|
this._doRun();
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
init(){
|
|
|
|
|
|
if(Array.isArray(PreLoadKeys) && PreLoadKeys.length>0){
|
|
|
|
|
|
const key = PreLoadKeys.shift();
|
|
|
|
|
|
wx.getStorage({
|
|
|
|
|
|
key,
|
|
|
|
|
|
success(res){
|
|
|
|
|
|
storage._cacheData[key] = res.data;
|
|
|
|
|
|
storage.init();
|
|
|
|
|
|
},
|
|
|
|
|
|
fail(){
|
|
|
|
|
|
storage._cacheData[key] = null;
|
|
|
|
|
|
storage.init();
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
setTimeout(()=>{
|
|
|
|
|
|
storage.init();
|
|
|
|
|
|
},0);
|
|
|
|
|
|
|
|
|
|
|
|
export default {
|
|
|
|
|
|
/*
|
|
|
|
|
|
本地存储
|
|
|
|
|
|
*/
|
|
|
|
|
|
WXStorageGetIntSync(key,defaultValue){
|
|
|
|
|
|
return +storage.getData(key,defaultValue);
|
|
|
|
|
|
},
|
|
|
|
|
|
WXStorageSetIntSync(key,value){
|
|
|
|
|
|
storage.setData(key,value);
|
|
|
|
|
|
},
|
|
|
|
|
|
WXStorageGetFloatSync(key,defaultValue){
|
|
|
|
|
|
return +storage.getData(key,defaultValue);
|
|
|
|
|
|
},
|
|
|
|
|
|
WXStorageSetFloatSync(key,value){
|
|
|
|
|
|
storage.setData(key,value);
|
|
|
|
|
|
},
|
|
|
|
|
|
WXStorageGetStringSync(key,defaultValue){
|
|
|
|
|
|
return storage.getData(key,defaultValue) || '';
|
|
|
|
|
|
},
|
|
|
|
|
|
WXStorageSetStringSync(key,value){
|
|
|
|
|
|
storage.setData(key,value);
|
|
|
|
|
|
},
|
|
|
|
|
|
WXStorageDeleteAllSync(){
|
|
|
|
|
|
storage.deleteAll();
|
|
|
|
|
|
},
|
|
|
|
|
|
WXStorageDeleteKeySync(key){
|
|
|
|
|
|
storage.deleteKey(key);
|
|
|
|
|
|
},
|
|
|
|
|
|
WXStorageHasKeySync(key){
|
|
|
|
|
|
return storage.getData(key,'') !== '';
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|