위 챗 애플 릿 동기 화 비동기 해결 방법

위 챗 애플 릿 동기 화 비동기 해결 방법
작은 프로그램 에서 함수 체 가 완성 되 지 않 았 고 다음 함수 가 실행 되 기 시 작 했 으 며 두 함수 사이 에 전 삼 이 필요 합 니 다.그것 은 위 챗 애플 릿 함수 가 비동기 로 실행 되 기 때문이다.그러나 위 챗 애플 릿 은 ES6 의 promise 특성 지원 을 추 가 했 고,위 챗 애플 릿 새 버 전에 서 promise 의 지원 을 제 거 했 으 며,스스로 ES6 의 promise 특성 을 실현 하기 위해 제3자 라 이브 러 리 를 사용 해 야 한다.
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

읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기