美文网首页
storage方法的优化历程

storage方法的优化历程

作者: 孙新强 | 来源:发表于2018-06-02 17:56 被阅读0次

    需求

    给wx.setStorage等添加命名空间

    • 根目录加 base_
    • 子目录加 base_child_key、base_child2_key
    • 如在child下存储 mobile=18888888888 则存储的结果为
    key val
    base_child_mobile 18888888888

    版本1

    1. baseStorage.js
    import {wx} from './wxapi';
    const BASE = 'base_';
    
    function setSync(key,data){
        key = BASE + key;
        return wx.setStorageSync(key,data);
    }
    
    function getSync(key){
        key = BASE + key;
        return wx.getStorageSync(key);
    }
    
    function removeSync(key){
        key = BASE + key;
        return wx.removeStorageSync(key);
    }
    
    export default {
        setSync,
        getSync,
        removeSync
    }
    
    1. childStorage.js
    import base from '../utils/baseStorage';
    const BASE = 'child_';
    
    function setSync(key,data){
        key = BASE + key;
        return base.setSync(key,data);
    }
    
    function getSync(key){
        key = BASE + key;
        return base.getSync(key);
    }
    
    function removeSync(key){
        key = BASE + key;
        return base.removeSync(key);
    }
    
    export default {
        setSync,
        getSync,
        removeSync
    }
    

    版本2

    加入异步的几个方法,在wxapi已经promise化

    1. baseStorage.js
    import {wx} from './wxapi';
    
    const BASE = 'base_';
    const storageFns = ['setStorage', 'getStorage', 'removeStorage', 'setStorageSync', 'getStorageSync', 'removeStorageSync'];
    let newStorage = {};
    
    storageFns.forEach(fnName => {
        let newFn = function(key, ...data){
            key = BASE + key;
            return wx[fnName](key, ...data);
        }
        newStorage[fnName.replace('Storage', '')] = newFn;
    })
    
    export default newStorage
    
    1. childStorage.js
    import base from '../utils/baseStorage';
    
    const BASE = 'child_';
    let storageNew = {};
    
    for(let fnName in base){
        let fnNew = function(key, ...args){
            key = BASE + key;
            return base[fnName](key, ...args);
        }
        storageNew[fnName] = fnNew;
    } 
    
    export default storageNew
    

    版本3

    采用类继承的写法

    1. baseStorage.js
    import {wx} from './wxapi';
    /**
     * 1. 添加命名空间
     * 2. 简化方法名,去掉Storage
     */
    const _storageFns = ['setStorage', 'getStorage', 'removeStorage', 'setStorageSync', 'getStorageSync', 'removeStorageSync'];
    const _nameSpace = 'base_';
    
    export class Storage {
        nameSpace = _nameSpace;
        constructor() {
            _storageFns.forEach(fnName => {
                let newFn = (key, ...data) =>{
                    key = this.nameSpace + key;
                    return wx[fnName](key, ...data);
                }
                this[fnName.replace('Storage', '')] = newFn;
            })
        }
    }
    
    1. childStorage.js
    import { Storage } from '../utils/baseStorage';
    
    const _childSpace = 'child_';
    
    class ChildStorage extends Storage {
        constructor(){
            super();
            this.nameSpace = this.nameSpace + _ticketSpace;
        }
    }
    
    export default new ChildStorage()
    

    调用都是一样滴

    版本1没有设置异步的 只有同步的可以用

    import storage from '../common/ChildStorage';
    
    storage.set('mobile', 18888888888)
      .then(() => {
          console.log('设置成功');
          return storage.get('mobile');
      })
      .then(data => {
          console.log(data);
      })
    

    相关文章

      网友评论

          本文标题:storage方法的优化历程

          本文链接:https://www.haomeiwen.com/subject/oiirsftx.html