微信小プログラムの同期非同期解決方法を詳しく説明する。


微信小プログラムの同期非同期解決方法を詳しく説明する。
小さいプログラムの関数はまだ完成していません。次の関数は実行を開始します。また、二つの関数の間で参照が必要です。なぜなら、WeChatウィジェット関数は非同期で実行されるからです。しかし、WeChatアプレットはES 6のpromiseの特性サポートを追加しました。WeChatアプレットの新バージョンはpromiseのサポートを除去しました。自分で第三者の倉庫を使って自分でES 6の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

読んでくれてありがとうございます。みなさんのご協力をお願いします。ありがとうございます。