当前位置: 移动技术网 > IT编程>开发语言>Java > 详解微信小程序 同步异步解决办法

详解微信小程序 同步异步解决办法

2019年07月22日  | 移动技术网IT编程  | 我要评论

详解微信小程序 同步异步解决办法

小程序中函数体还没有完成,下一个函数就开始执行了,而且两个函数之间需要传参。那是因为微信小程序函数是异步执行的。但微信小程序增加了es6的promise特性支持,微信小程序新版本中移除了promise的支持,需要自己使用第三方库来自行实现es6的promise特性。

wxservice.js

import tools from 'tools'
import es6 from '../assets/plugins/es6-promise'

class service {
 constructor() {
  this.__init()
 }

 /**
  * __init
  */
 __init() {
  this.tools = new tools
  this.__initdefaults()
  this.__initmethods()
 }


 /**
  * __initdefaults
  */
 __initdefaults() {
  // 缓存非异步方法
  this.nopromisemethods = [
   'stoprecord',
   'pausevoice',
   'stopvoice',
   'pausebackgroundaudio',
   'stopbackgroundaudio',
   'shownavigationbarloading',
   'hidenavigationbarloading',
   'createanimation',
   'createcontext',
   'hidekeyboard',
   'stoppulldownrefresh',
  ]

  // 缓存wx接口方法名
  this.instancesource = {
   method: object.keys(wx)
  }
 }

 /**
  * 遍历wx方法对象,判断是否为异步方法,是则构造promise
  */
 __initmethods() {
  for (let key in this.instancesource) {
   this.instancesource[key].foreach((method, index) => {
    this[method] = (...args) => {
     // 判断是否为非异步方法或以 wx.on 开头,或以 sync 结尾的方法
     if (this.nopromisemethods.indexof(method) !== -1 || method.substr(0, 2) === 'on' || /\w+sync$/.test(method)) {
      return wx[method](...args)
     }
     return this.__defaultrequest(method, ...args)
    }
   })
  }

    /**
     * 保留当前页面,跳转到应用内的某个页面
     * @param {string} url 路径
     * @param {object} params 参数
     */
  this.navigateto = (url, params) => {
   const $$url = this.tools.buildurl(url, params)
   return new es6.promise((resolve, reject) => {
    wx.navigateto({
     url: $$url,
     success: res => resolve(res),
     fail: res => reject(res),
    })
   })
  }

  /**
  * 关闭当前页面,跳转到应用内的某个页面
  * @param {string} url 路径
  * @param {object} params 参数
  */
  this.redirectto = (url, params) => {
   const $$url = this.tools.buildurl(url, params)
   return new es6.promise((resolve, reject) => {
    wx.redirectto({
     url: $$url,
     success: res => resolve(res),
     fail: res => reject(res),
    })
   })
  }
 }

 /**
  * 以wx下api作为底层方法
  * @param {string} method 方法名
  * @param {object} obj  接收参数
  */
 __defaultrequest(method = '', obj = {}) {
  return new es6.promise((resolve, reject) => {
   obj.success = (res) => resolve(res)
   obj.fail = (res) => reject(res)
   wx[method](obj)
  })
 }
}

export default service

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网