import { BaseStore } from 'base-store'; import { FastStore } from 'fast-store'; import { toPromise } from '../utils'; declare var wx; const fastStore = new FastStore(); export class Store extends BaseStore { constructor() { super() } getInfo () { return toPromise(wx.getStorageInfo); } set (key: string, data: any, fast?:boolean) { if(fast) fastStore.set(key, data); return toPromise(wx.setStorage, { key, data }).then(() => { return this.get(key, fast); }); } get (key: string, fast?:boolean) { if(fast){ const fastValue = fastStore.get(key); if(fastValue) return Promise.resolve(fastValue); return new Promise((resolve) => { return toPromise(wx.getStorage, { key }).then((res:any) => { resolve(res.data); fastStore.set(key, res.data); }, () => { resolve(null); // 读取出错也从这里走,结果返回null fastStore.set(key, null); }); }); }else{ return new Promise((resolve) => { return toPromise(wx.getStorage, { key }).then((res:any) => { resolve(res.data); }, () => { resolve(null); // 读取出错也从这里走,结果返回null }); }); } } remove (key: string) { fastStore.remove(key); return toPromise(wx.removeStorage, { key }); } clear () { fastStore.clear(); return toPromise(wx.clearStorage); } base (storeName, fast?:boolean) { return { set: (key: string, data) => { return this.get(storeName).then((res) => { res = res || {}; res[key] = data; return this.set(storeName, res).then(() => { return data; }); }); }, get: (key: string) => { return this.get(storeName).then((res) => { res = res || {}; return res[key]; }); }, getAll: () => { return this.get(storeName).then((res) => { return res || {}; }); }, remove: (key: string) => { return this.get(storeName).then((res) => { res[key] = null; delete res[key]; return this.set(storeName, res); }); }, clear: () => { return this.clear(); } } } // 页面存储 page = (pageName:string) => { return this.base('page.' + pageName); } }