• 实现数据逻辑与业务的解耦,模板文件填入你需要的数据,框架自动去请求相关数据


    /*
    并发加载函数
    id:唯一值
    syncFunc:加载函数
     */
    const _map={}
    const _startTimeMap={}
    async function conCurentLoad (id,syncFunc) {
      //兼容并发加载的情况
      if(!_map[id]){
        _map[id]=[];
        _startTimeMap[id]=+new Date();
        const res = await syncFunc();
        setTimeout(function () {
          if(_map[id].length>0){
            _map[id].forEach(function (callback) {
              callback(res)
            })
          }
          delete _map[id]
        },0)
        return res;
      }else{
        const now=+new Date();
        //10秒超时处理
        if(now-_startTimeMap[id]<10000){
          return new Promise(function (resolve) {
            _map[id].push(resolve)
          });
        }else{
          return syncFunc();
        }
      }
    }
    //加载组合数据
    async function loadGroup(data) {
      if(typeof data==='object'){
        for(let k in data){
          if(Object.prototype.toString.call(data[k])==='[object Promise]'){
            data[k]=await data[k];
          }
          if(typeof data[k]==='object'){
            data[k]=await loadGroup(data[k])
          }
        }
      }
      return data
    }
    //定义
    function defineModal(data,_ajax){
      //唯一标识
      let id=Symbol('id')
      return new Proxy(data, {
        get(target, key) {
          if(target.hasLoad||target.hasOwnProperty(key)){
            return target[key]
          }
          return conCurentLoad(id,async function () {
            const data=await _ajax()
            Object.assign(target,data)
            target.hasLoad=true;
            return target
          }).then(function () {
            return target[key];
          })
        }
      })
    }
    //定义有请求的数据源
    const User =defineModal({
      name:215
    },function () {
      return new Promise(function (resolve) {
        setTimeout(function () {
          resolve({
            name:'user',
            list:[
              {
                a:'a'
              }
            ]
          })
        },100)
      })
    })
    
    //Page modal
    let Page = {
      page:User.list
    };
    let Tmp = {
      page:Page
    };
    
    async function init(){
      const data={
        TmpPage:Page.page,
        Tmp
      }
      //从模板中读取到的字符
      const tmpStrs=['Tmp.page','TmpPage']
      const func=new Function('data', `with(data){return [${tmpStrs.join(',')}]}`)
      const arr=await loadGroup(func(data))
      console.log(arr)
    
      console.log(User.name)
      //接口模式
      // const name=await loadGroup({
      //   name:Tmp.page.page,
      //   name2:User.list,
      //   arr:[{
      //     d:User.name
      //   },User.name]
      // })
      // console.log(name);
    }
    
    init()
    
    //加载模板,解析出数据源
    
    //处理数据源,返回数据
    
    //渲染页面或者json
    

      

  • 相关阅读:
    李超线段树 [Heoi2013]Segment
    [置顶] 九月半集训总结
    [置顶] 我想学学
    图论+前缀和 任(duty)
    模拟 飞(fly)
    入坑 可持久化线段树——主席树
    一次爆炸的联考
    HASH+平衡树 [JSOI2008]火星人prefix
    乱搞+STL平衡树 序列
    数学+图论 建造游乐场
  • 原文地址:https://www.cnblogs.com/caoke/p/15329490.html
Copyright © 2020-2023  润新知