美文网首页
小程序异步转promise

小程序异步转promise

作者: 凡凡的小web | 来源:发表于2020-12-17 22:47 被阅读0次
    // https://github.com/youngjuning/wx-promise-pro
    
    // const asyncMethods = [
    //   'canvasGetImageData',
    //   'canvasPutImageData',
    //   'canvasToTempFilePath',
    //   'setEnableDebug',
    //   'startAccelerometer',
    //   'stopAccelerometer',
    //   'getBatteryInfo',
    //   'getClipboardData',
    //   'setClipboardData',
    //   'startCompass',
    //   'stopCompass',
    //   'addPhoneContact',
    //   'startGyroscope',
    //   'stopGyroscope',
    //   'startBeaconDiscovery',
    //   'stopBeaconDiscovery',
    //   'getBeacons',
    //   'startLocalServiceDiscovery',
    //   'stopLocalServiceDiscovery',
    //   'startDeviceMotionListening',
    //   'stopDeviceMotionListening',
    //   'getNetworkType',
    //   'makePhoneCall',
    //   'scanCode',
    //   'getSystemInfo',
    //   'vibrateShort',
    //   'vibrateLong',
    //   'getExtConfig',
    //   'chooseLocation',
    //   'getLocation',
    //   'openLocation',
    //   'chooseMessageFile',
    //   'loadFontFace',
    //   'chooseImage',
    //   'previewImage',
    //   'getImageInfo',
    //   'saveImageToPhotosAlbum',
    //   'compressImage',
    //   'chooseVideo',
    //   'saveVideoToPhotosAlbum',
    //   'downloadFile',
    //   'request',
    //   'connectSocket',
    //   'closeSocket',
    //   'sendSocketMessage',
    //   'uploadFile',
    //   'login',
    //   'checkSession',
    //   'chooseAddress',
    //   'authorize',
    //   'addCard',
    //   'openCard',
    //   'chooseInvoice',
    //   'chooseInvoiceTitle',
    //   'getUserInfo',
    //   'requestPayment',
    //   'getWeRunData',
    //   'showModal',
    //   'showToast',
    //   'hideToast',
    //   'showLoading',
    //   'hideLoading',
    //   'showActionSheet',
    //   'pageScrollTo',
    //   'startPullDownRefresh',
    //   'stopPullDownRefresh',
    //   'setBackgroundColor',
    //   'setBackgroundTextStyle',
    //   'setTabBarBadge',
    //   'removeTabBarBadge',
    //   'showTabBarRedDot',
    //   'hideTabBarRedDot',
    //   'showTabBar',
    //   'hideTabBar',
    //   'setTabBarStyle',
    //   'setTabBarItem',
    //   'setTopBarText',
    //   'saveFile',
    //   'openDocument',
    //   'getSavedFileList',
    //   'getSavedFileInfo',
    //   'removeSavedFile',
    //   'getFileInfo',
    //   'getStorage',
    //   'setStorage',
    //   'removeStorage',
    //   'clearStorage',
    //   'getStorageInfo',
    //   'closeBLEConnection',
    //   'closeBluetoothAdapter',
    //   'createBLEConnection',
    //   'getBLEDeviceCharacteristics',
    //   'getBLEDeviceServices',
    //   'getBluetoothAdapterState',
    //   'getBluetoothDevices',
    //   'getConnectedBluetoothDevices',
    //   'notifyBLECharacteristicValueChange',
    //   'openBluetoothAdapter',
    //   'readBLECharacteristicValue',
    //   'startBluetoothDevicesDiscovery',
    //   'stopBluetoothDevicesDiscovery',
    //   'writeBLECharacteristicValue',
    //   'getHCEState',
    //   'sendHCEMessage',
    //   'startHCE',
    //   'stopHCE',
    //   'getScreenBrightness',
    //   'setKeepScreenOn',
    //   'setScreenBrightness',
    //   'connectWifi',
    //   'getConnectedWifi',
    //   'getWifiList',
    //   'setWifiList',
    //   'startWifi',
    //   'stopWifi',
    //   'getBackgroundAudioPlayerState',
    //   'playBackgroundAudio',
    //   'pauseBackgroundAudio',
    //   'seekBackgroundAudio',
    //   'stopBackgroundAudio',
    //   'getAvailableAudioSources',
    //   'startRecord',
    //   'stopRecord',
    //   'setInnerAudioOption',
    //   'playVoice',
    //   'pauseVoice',
    //   'stopVoice',
    //   'getSetting',
    //   'openSetting',
    //   'getShareInfo',
    //   'hideShareMenu',
    //   'showShareMenu',
    //   'updateShareMenu',
    //   'checkIsSoterEnrolledInDevice',
    //   'checkIsSupportSoterAuthentication',
    //   'startSoterAuthentication',
    //   'navigateBackMiniProgram',
    //   'navigateToMiniProgram',
    //   'setNavigationBarTitle',
    //   'showNavigationBarLoading',
    //   'hideNavigationBarLoading',
    //   'setNavigationBarColor',
    //   'redirectTo',
    //   'reLaunch',
    //   'navigateTo',
    //   'switchTab',
    //   'navigateBack'
    // ]
    
    // polyfill for finally
    if(!Promise.prototype.finally) {
      Promise.prototype.finally = function (callback) {
        let P = this.constructor
        return this.then(
          value  => P.resolve(callback()).then(() => value),
          reason => P.resolve(callback()).then(() => { throw reason })
        )
      }
    }
    
    // core method
    export const promisify = (api) => {
      return (args = {}) => {
        return new Promise((resolve, reject) => {
          api({
            fail: reject,
            success: resolve,
            ...args,
          })
        })
      }
    }
    
    // export const promisifyAll = () => {
    //   wx.pro = {}
    //   Object.keys(wx).forEach(key => {
    //     if (asyncMethods.indexOf(key) >= 0) {
    //       wx.pro[key] = promisify(wx[key])
    //     } else if (key !== 'createSignal') { 
    //       wx.pro[key] = wx[key]
    //     }
    //   })
    // }
    
    

    使用
    在app.js里弄成全局的
    import { promisify } from './utils/wx-promise-pro.js'

    wx.pro = {}
    wx.pro.request = promisify(wx.request)

    wx.pro.request({
          url: 'https://api.miyamibao.com/v4/wechat/Binding/openidverfiy',
          method: "post",
          data: {
            openid: openid
          }
        }).then( res => {
          console.log(res)
          if (res.statusCode === 200 || res.statusCode === 201) {
              var data = res.data
              if(data.data && data.data.code == "on"){
                that.setData({
                  status: 1
                })
                that.getStudent()
                // wx.setStorageSync('bind_status', 1)
              }else{
                that.setData({
                  status: 0
                })
                // wx.removeStorageSync('bind_status');
              }
          }else{
            wx.showToast({
              title: "绑定信息状态码:"+res.statusCode,
              duration: 2000,
              icon: 'none'
            })
          }
        }).catch(err => {
          wx.showToast({
            title: "接口请求失败",
            duration: 2000,
            icon: 'none'
          })
        }).finally(() => {
          wx.hideLoading()
        })
    
    // util.js
    const formatTime = date => {
      const year = date.getFullYear()
      const month = date.getMonth() + 1
      const day = date.getDate()
      const hour = date.getHours()
      const minute = date.getMinutes()
      const second = date.getSeconds()
    
      return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
    }
    
    const formatNumber = n => {
      n = n.toString()
      return n[1] ? n : '0' + n
    }
    
    function compareVersion(v1, v2) {
      v1 = v1.split('.')
      v2 = v2.split('.')
      const len = Math.max(v1.length, v2.length)
    
      while (v1.length < len) {
        v1.push('0')
      }
      while (v2.length < len) {
        v2.push('0')
      }
    
      for (let i = 0; i < len; i++) {
        const num1 = parseInt(v1[i])
        const num2 = parseInt(v2[i])
    
        if (num1 > num2) {
          return 1
        } else if (num1 < num2) {
          return -1
        }
      }
      return 0
    }
    module.exports = {
      formatTime: formatTime,
      compareVersion: compareVersion
    }
    

    相关文章

      网友评论

          本文标题:小程序异步转promise

          本文链接:https://www.haomeiwen.com/subject/wypniktx.html