ホームページ  >  記事  >  WeChat アプレット  >  WeChat アプレット wx.request のカプセル化の詳細な例

WeChat アプレット wx.request のカプセル化の詳細な例

小云云
小云云オリジナル
2018-02-07 15:59:294424ブラウズ

私は最近、自分自身で小さなプログラム開発を試みましたが、常に落とし穴がありますが、リクエストの部分は本当に醜いと思うので、ご存知のとおり、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
      })
    })
  }

上記のコードは、この方法が気に入るかどうかわかりません。 次に、パッケージ化方法を見てみましょう。

Promise を使用して wx.request をカプセル化します

当社の Web サイトのほとんどはログイン ステータスを維持するために Cookie を使用しますが、小規模なプログラムではログイン ステータスを維持するために Cookie を使用できないため、最初に Cookie を取得します。リクエストヘッダーを取得し、グローバル変数のうち Cookie を保存します (Cookie を取得するのは問題ないと思います。この部分は表示されません)

// 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
}

上記のコードは次のようになります。 手順が増えているように見えますが、この利点は、ビジネスコードではなくビジネスだけに焦点を当てていることです。もちろん、コンテンツ タイプの切り替えも便利です。パラメータを渡す方法が 1 つしかない場合は、これが私の最初の記事です。何人かの人を助けてほしいのは、偉い人たちがあなたにアドバイスやアドバイスをくれることです。

関連する推奨事項:

WeChat アプレット wx.request は、バックグラウンド データ インタラクション機能分析を実現します

アプレット開発 - ネットワーク リクエスト wx.request サンプル チュートリアル

アプレット開発 - wx.request 非同期カプセル化 サンプル チュートリアル

以上がWeChat アプレット wx.request のカプセル化の詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。