91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

發布時間: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

剑川县| 崇信县| 湘潭市| 根河市| 来宾市| 古蔺县| 荆州市| 黄骅市| 青海省| 乌苏市| 墨竹工卡县| 吉林省| 康马县| 永城市| 固原市| 深圳市| 加查县| 通辽市| 武义县| 吉隆县| 洮南市| 凤庆县| 扎鲁特旗| 新干县| 奉节县| 天峻县| 乐都县| 富蕴县| 西城区| 洛扎县| 武宣县| 濉溪县| 无极县| 平安县| 鄢陵县| 磐石市| 普兰县| 莆田市| 伊宁市| 新余市| 永年县|