最近自己嘗試了一下小程式開發,坑麼總是有的,但是我覺得還是request這部分實在是不好看,所以你懂得,我用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
使用Promise 封裝wx.request
我們大部分網站都是用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 }
上面的程式碼看起來像是步驟變多了,但是這樣的好處是維護方便,在業務程式碼裡只專注於業務,而不用去關注請求的本身,content-type 切換也方便,當然如果你們的傳參方式只有一種可以寫死更簡單一些,作為前端菜鳥的第一篇文章希望能幫助到幾個人,最希望大佬們不吝賜教,指點指點點點。
相關推薦:
以上是實例詳解微信小程式wx.request 的封裝的詳細內容。更多資訊請關注PHP中文網其他相關文章!