麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 課堂 > 小程序 > 正文

微信小程序網絡層封裝的實現(promise, 登錄鎖)

2020-03-21 15:57:18
字體:
來源:轉載
供稿:網友

一、對小程序的request的封裝

寫過小程序的應該知道,微信的request不封裝基本上不能用,寫的顯的太冗長,而且是回調式的,回調地獄什么的就不說了,可讀性差。

下面是我的封裝代碼,順便支持一下promise。

function baseRequest({ url, method, header, data, complete }, resolve, reject) { wx.request({ url, method, header, data, success: function (res) {  // 需要判斷服務器code的用這一段  // 我司服務器返回0表示真正的成功,其他code表示各種錯誤碼  // if (res.data.code === 0) {  // resolve(res)  // } else {  // reject(res)  // }  resolve(res) }, fail: function (res) {  reject(res) }, complete: function (res) {  complete(res) } })}function requestPromise( options ) { let req = new Promise((resolve, reject) => { baseRequest(options, resolve, reject) }) return req}function get(options) { options.method = 'GET' return requestPromise(options)}function post(options) { options.method = 'POST' if (!options.header) { options.header = {} } options.header["Content-Type"] = "application/x-www-form-urlencoded" return requestPromise(options)}function put(options) { options.method = 'PUT' if (!options.header) { options.header = {} } options.header["Content-Type"] = "application/x-www-form-urlencoded" return requestPromise(options)}module.exports = { get, post, put}

如何使用:

1. 將上面的代碼寫到一個獨立的文件里,我的命名為network.js。

2. 然后將其綁定到全局的 wx 對象身上。 wx.Network = require('./network.js')。(在app.js里面綁定)

3. 實例如下

wx.Network.get({ url: 'xxx.xxx.xxx', // 請求路徑 data: {  a: "a" // 參數列表 } }).then(res => {  console.log("請求成功") }).catch(res => {  console.log("請求失敗")  })

二、登錄鎖

基本的request請求封裝完了后,還有一些特殊的需求,比如

1. 在首頁我會進行登錄, 登錄后獲得token, 然后我拿著token去請求其他需要token才可以請求的接口 (比如個人購物信息)

2. 這個時候一種做法是登錄完成前不進行需要token的請求,并且有蒙板進行攔截操作(正在登錄ing...)

3. 對于我公來說這種方法有一個致命的弊端,就是在高并發的情況下,服務器的壓力很大,首頁的登錄接口很慢才有返回(進首頁即自動登錄),這個時候,用戶看到的界面就是loading,而且可能時間比較長,如果用戶對你的產品粘性不高,絕大部分人直接就走了

4. 為了優化這種情況下的用戶體驗,我們全面取消了登錄的loading,替換成了“登錄鎖”的形式

5. 效果為未登錄調用需要token的接口時,不請求,直到登錄完成后才會請求

6. 即如果這個請求需要token,那么先判斷有沒有登錄,如果沒有登錄,啟動定時器一段時間后(200ms),再次判斷,如果已經登錄,發出請求,如果沒有,重復以上操作

加了登錄鎖后的代碼如下: ( 添加了新的 wait 函數,調用get,post,put時增加第二個參數,表示是否需要token )

function baseRequest({ url, method, header, data, complete }, resolve, reject) { wx.request({ url, method, header, data, success: function (res) {  // 需要判斷服務器code的用這一段  // 我司服務器返回0表示真正的成功,其他code表示各種錯誤碼  // if (res.data.code === 0) {  // resolve(res)  // } else {  // reject(res)  // }  resolve(res) }, fail: function (res) {  reject(res) }, complete: function (res) {  complete(res) } })}function wait(options, needToken, resolve, reject) { if (needToken) { var token = wx.getStorageSync('token') if (!token) {  setTimeout(() => {  wait.apply(null, arguments)  }, 200) } else {  if (!options.header) {  options.header = {}  }  options.header["token"] = token  baseRequest(options, resolve, reject) } } else { baseRequest(options, resolve, reject) }}function requestPromise( options, needToken = true ) { let req = new Promise((resolve, reject) => { wait(options, needToken, resolve, reject) }) return req}function get(options, needToken) { options.method = 'GET' return requestPromise(options, needToken)}function post(options, needToken) { options.method = 'POST' if (!options.header) { options.header = {} } options.header["Content-Type"] = "application/x-www-form-urlencoded" return requestPromise(options, needToken)}function put(options, needToken) { options.method = 'PUT' if (!options.header) { options.header = {} } options.header["Content-Type"] = "application/x-www-form-urlencoded" return requestPromise(options, needToken)}module.exports = { get, post, put}

如何使用:(使用方式和上面一樣,只是調用的時候多一個參數)

1. 將上面的代碼寫到一個獨立的文件里,我的命名為network.js。

2. 然后將其綁定到全局的 wx 對象身上。 wx.Network = require('./network.js')。(在app.js里面綁定)

3. 實例如下

wx.Network.get({ url: 'xxx.xxx.xxx', // 請求路徑 data: {  a: "a" // 參數列表 } }, true // 增加第二個參數,true表示需要token, false表示不需要 ).then(res => {  console.log("請求成功") }).catch(res => {  console.log("請求失敗")  })

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永久免费在线观看av | 成人午夜视频在线观看免费 | 欧美69free性videos | 欧洲精品色 | 欧美性生交xxxxx久久久缅北 | av最新在线 | 污视频在线免费播放 | 免费观看视频91 | 国产精品久久久久久久久久 | 国产妇女乱码一区二区三区 | 国产精品久久久久久久久久大牛 | 色999久久久精品人人澡69 | 色综合视频网 | av电影在线观看免费 | 成年人小视频在线观看 | 性爱免费在线视频 | 国产美女视频一区 | 369看片你懂的小视频在线观看 | 看免费一级毛片 | 国产成人羞羞视频在线 | 日本在线播放一区二区 | 717影院理论午夜伦八戒秦先生 | 欧美电影在线观看 | 国产精品久久久久无码av | 少妇一级淫片高潮流水电影 | 久久激情国产 | 在线观看av国产一区二区 | 日本欧美一区二区 | 欧美成年人在线视频 | 麻豆传传媒久久久爱 | 成年免费视频黄网站在线观看 | 中韩毛片| 91网站免费观看 | www中文在线 | 欧美视频在线一区二区三区 | 欧美亚洲一区二区三区四区 | 视频一区二区视频 | 91成人在线免费视频 | 伊人午夜视频 | 91一级毛片 | 最新av在线播放 |