增强微信小程序API,远离回调地狱

发布时间:2025-04-08 11:19 浏览次数:250

 增强微信小程序API,远离回调地狱


增强微信小程序API


为什么要增强微信小程序API


微信小程序因其双线程框架,导致大部分API都是异步API,比如,最常用的wx.request。而小程序的API的设计,都是采用回调形式。这样,业务过于复杂的时候,就会陷入回调地狱中,而且代码的可读性也变差。


材料准备


提到异步编程,Promise就该闪亮登场了。


Promise


微信小程序有众多的API,总不能用到哪个,封装哪个,这样太繁琐了,还是得统一封装一下,复制一套微信小程序API,代理异步方法,封装成Promise。说道代理,Proxy要闪亮登场了,但是,微信小程序除了iOS10+以上的系统,其他环境并不支持Proxy,好吧,只能让Proxy歇歇了。老老实实的使用Object.defineProperty代理吧。


Object.defineProperty


撸代码环节


工具函数走起


判断是否为对象


function isObject (object) {


  return Object.prototype.toString.call(object) === '[object Object]'


}


递归深拷贝对象


function copy (object, target) {


  let copyobject = target || {}


  const keys = Object.keys(object)


  keys.forEach(key => {


    if (isObject(object[key])) {


      copy(object[key], copyobject[key])


    } else {


      copyobject[key] = object[key]


    }


  })


  return copyobject


}


代理走你


function proxyProperty (object, property) {


  const value = object[property]


  Object.defineProperty(object, property, {


    get () {


      if (typeof value === 'function' && !/(Sync)$/.test(property)) {


        return function(params, ...args) {


          return new Promise((resolve, reject) => {


            value ({


              ...params,


              success: res => {


                params && params.success && params.success(res);


                resolve(res);


              },


              fail: err => {


                params && params.fail && params.fail(err);


                reject(err)


              }


            }, ...args);


          });


        }.bind(object);


      } else {


        return value


      }


    }


  })


}


 


function proxy (object) {


  const keys = Object.keys(object)


  keys.forEach(key => {


    if (isObject(object[key])) {


      proxy(object[key])


    } else {


      proxyProperty(object, key)


    }


  })


}


 


let wxapi = copy(wx)


proxy(wxapi)


导出增强API


export {


  wxapi


}


app.js中导入挂载


import { wxapi } from './utils/util.js';


App({


  wxapi


})


END


尽情的then,async/await吧。·


小程序开发

腾虎网络持续为企业提供小程序开发,APP开发,软件定制开发,微信开发,OA办公系统,CRM系统,ERP管理系统,公众号开发,金融,教育,商城,医疗,政务小程序开发等互联网业务已经有20年之久,让企业与用户快速连接起来。

关闭

在线留言