中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

詳解微信小程序 同步異步解決辦法

發布時間:2020-09-12 09:25:49 來源:腳本之家 閱讀:260 作者:xiaochun365 欄目:編程語言

詳解微信小程序 同步異步解決辦法

小程序中函數體還沒有完成,下一個函數就開始執行了,而且兩個函數之間需要傳參。那是因為微信小程序函數是異步執行的。但微信小程序增加了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

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

定远县| 广安市| 莱州市| 建水县| 岗巴县| 咸宁市| 龙南县| 溧阳市| 榆中县| 瑞金市| 昭苏县| 商洛市| 右玉县| 册亨县| 玛多县| 灵璧县| 武宣县| 奎屯市| 游戏| 常熟市| 密山市| 肥西县| 湛江市| 双牌县| 孟州市| 来安县| 龙南县| 深州市| 新乐市| 息烽县| 桑植县| 临朐县| 大连市| 永善县| 永济市| 景洪市| 丹阳市| 宜宾县| 沽源县| 宜阳县| 防城港市|