Пакет апплета WeChat wx.request

внешний интерфейс JavaScript Апплет WeChat Promise

первая речь

Прошло почти два года с тех пор, как я перешел на фронт самообучения.Я тоже преданный фанат Цзяньшу и Наггетс, но раньше я дорожил словами как золото (это было реально трусливо и мой уровень был низкий), а теперь решил относиться к деньгам как к навозу (это просто кожа).Толстая, уровень такой), ну не будем чушь нести, давайте по теме, я недавно пробовал разработку мелких программ, всегда есть некоторые подводные камни, но я думаю, что часть запроса действительно уродлива, так что вы знаете, я использую Promise для простой инкапсуляции запроса. Метод, описанный в этой статье, в основном предназначен для стороннего входа в систему.

Без лишних слов вставьте код напрямую:

js, связанный с бизнесом

  // 获取剩余金额 --- GET 请求无参数
  getBalance: function () {
    api.getBalance().then(data => {
      let balance = data.data
      balance.balance = balance.balance.toFixed(2)
      this.setData({
        balance: { ...balance }
      })
    })
  },

  // 获取昨日消费数据 --- POST 请求,使用 application/x-www-form-urlencoded 传参
  getLastCost: function () {
    let yestoday = util.transDate('', -1)
    let data = {
      subAccountIdx: 0,
      startDay: yestoday,
      endDay: yestoday,
      type: 0,
      business: 0,
      export: false
    }
    api.getLastCost(data, 'application/x-www-form-urlencoded', 'POST').then(data => {
      let lastCost = data.data.record.totalConsumeMoney
      lastCost = lastCost.toFixed(2)
      this.setData({
        lastCost: lastCost
      })
    })
  }

Из вышеприведенного кода код бизнес части.Не знаю понравится ли вам этот метод.Далее давайте посмотрим на конфигурацию js соответствующую методу инкапсуляции и бизнесу.

Оберните wx.request с обещанием

Большинство наших веб-сайтов используют куки для поддержания состояния входа в систему, но апплет не может использовать куки для поддержания состояния входа в систему, поэтому мы сначала получаем куки в заголовке запроса, а затем сохраняем куки в глобальной переменной (я полагаю, что получение куки точно не нужны.Проблема,эта часть показываться не будет)

// wx.request 封装
var app = getApp() 

function wxRequest(url, config, resolve, reject) {
  let { 
    data = {},
    contentType = 'application/json',
    method = 'GET',
    ...other
  } = {...config}
  wx.request({
    url: url,
    data: {...data},
    method: method,
    header: {
      'content-type': contentType,
      'Cookie': app.globalData.cookie  // 全局变量中获取 cookie
    },
    success: (data) => resolve(data),
    fail: (err) => reject(err)
  })
}

module.exports = {
  wxRequest: wxRequest
}

Инкапсулированный код очень прост, следующим шагом будет настройка кода

Конфигурация js соответствующая бизнесу

// 用 import 或者 require 引入模块 
import util from '../../../util/util.js'
var Promise = require('../../../plugin/promise.js')    // 请注意 Promise 要手动引入,内测版是自动引入的

// 获取个人信息
const API_USERINFO = "https://www.***/get"
// 获取剩余金额
const API_BALANCE = 'https://www.***/get'
// 获取昨日消费数据
const API_LASTCOST = 'https://www.***/get'


// 获取个人信息事件  
function getUserInfo(data, contentType) {

  var promise = new Promise((resolve, reject) => {
    util.wxRequest(API_USERINFO, { data, contentType }, resolve, reject)
  })

  // return promise
  return promise.then(res => {
    return res.data
  }).catch(err => {
    console.log(err) 
  })
}

// 获取剩余金额事件
function getBalance(data, contentType) {

  var promise = new Promise((resolve, reject) => {
    util.wxRequest(API_BALANCE, { data, contentType }, resolve, reject)
  })

  // return promise
  return promise.then(res => {
    return res.data
  }).catch(err => {
    console.log(err)
  })
}

// 获取昨日消费数据
function getLastCost(data, contentType, method) {

  var promise = new Promise((resolve, reject) => {
    util.wxRequest(API_LASTCOST, { data, contentType, method }, resolve, reject)
  })

  // return promise
  return promise.then(res => {
    return res.data
  }).catch(err => {
    console.log(err)
  })
}

module.exports = {
  getUserInfo: getUserInfo,
  getBalance: getBalance,
  getLastCost: getLastCost
}

Вышеприведенный код выглядит так, как будто шагов больше, но преимущество этого в том, что его легко поддерживать.В бизнес-коде вам нужно сосредоточиться только на бизнесе, а не на самом запросе, и переключение типа контента также удобно.Конечно если ваш метод передачи параметров есть только один который можно записать насмерть.Он проще.Как первая статья новичка фронтенда,надеюсь помочь нескольким людям.Надеюсь что большой ребята подскажут и подскажут.