<强>详解微信小程序同步异步解决办法强>
小程序中函数体还没有完成,下一个函数就开始执行了,而且两个函数之间需要传参。那是因为微信小程序函数是异步执行的,但微信小程序增加了ES6的承诺特性支持,微信小程序新版本中移除了承诺的支持,需要自己使用第三方库来自行实现ES6的承诺特性。
<强> WxService.js 强>
从“工具”导入工具 从“. ./资产/插件/进口es6 es6-promise” 类服务{ 构造函数(){ this.__init () }/* * * __init */__init () { 这一点。工具=新工具 this.__initDefaults () this.__initMethods () }/* * * __initDefaults */__initDefaults () {//缓存非异步方法 这一点。noPromiseMethods=[ “stopRecord”, “pauseVoice”, “stopVoice”, “pauseBackgroundAudio”, “stopBackgroundAudio”, “showNavigationBarLoading”, “hideNavigationBarLoading”, “createAnimation”, “createContext”, “hideKeyboard”, “stopPullDownRefresh”, ]//缓存wx接口方法名 这一点。instanceSource={ 方法:种(的天气) } }/* * *遍历wx方法对象,判断是否为异步方法,是则构造的承诺 */__initMethods () { (让关键this.instanceSource) { this.instanceSource(关键)。forEach(方法、指数=比;{ [方法]=(…args)=比;{//判断是否为非异步方法或以wx。在开的头,或以同步结尾的方法 如果(this.noPromiseMethods.indexOf(方法)!==1 | |方法。substr (0, 2)===' ' | |/\ w +同步$/test(方法)){ 返回wx[方法](args) } 返回。__defaultRequest(方法,…args) } }) }/* * *保留当前页面,跳转到应用内的某个页面 * @param{}字符串url路径 * @param{对象}params参数 */这一点。navigateTo=(url, params)=比;{ const $ $ url=this.tools。buildUrl (url参数) 返回新es6。承诺((解决,拒绝)=比;{ wx.navigateTo ({ url: $ $ url, 成功:res=比;解决(res), 失败:res=比;拒绝(res), }) }) }/* * *关闭当前页面,跳转到应用内的某个页面 * @param{}字符串url路径 * @param{对象}params参数 */这一点。redirectTo=(url, params)=比;{ const $ $ url=this.tools。buildUrl (url参数) 返回新es6。承诺((解决,拒绝)=比;{ wx.redirectTo ({ url: $ $ url, 成功:res=比;解决(res), 失败:res=比;拒绝(res), }) }) } }/* * *以天气下API作为底层方法 * @param{}字符串方法方法名 * @param}{对象obj接收参数 */__defaultRequest (obj方法="={}){ 返回新es6。承诺((解决,拒绝)=比;{ obj。成功=(res)=比;解决(res) obj。失败=(res)=比;拒绝(res) wx[方法](obj) }) } } 导出默认服务 >之前感谢阅读,希望能帮助到大家,谢谢大家对本站的支持。
详解微信小程序同步异步解决办法