小程序异步转promise

2020-12-17  本文已影响0人  凡凡的小web
// 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
}
上一篇 下一篇

猜你喜欢

热点阅读