国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

微信小程序網(wǎng)絡(luò)層封裝(promise, 登錄鎖)

趙春朋 / 601人閱讀

摘要:需要判斷服務(wù)器的用這一段我司服務(wù)器返回表示真正的成功,其他表示各種錯(cuò)誤碼如何使用將上面的代碼寫(xiě)到一個(gè)獨(dú)立的文件里,我的命名為。

一、對(duì)小程序的request的封裝
寫(xiě)過(guò)小程序的應(yīng)該知道,微信的request不封裝基本上不能用,寫(xiě)的顯的太冗長(zhǎng),而且是回調(diào)式的,回調(diào)地獄什么的就不說(shuō)了,可讀性差。
下面是我的封裝代碼,順便支持一下promise。
function baseRequest({ url, method, header, data, complete }, resolve, reject) {
  wx.request({
    url,
    method,
    header,
    data,
    success: function (res) {
      // 需要判斷服務(wù)器code的用這一段
      // 我司服務(wù)器返回0表示真正的成功,其他code表示各種錯(cuò)誤碼
      // 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. 將上面的代碼寫(xiě)到一個(gè)獨(dú)立的文件里,我的命名為network.js。
2. 然后將其綁定到全局的 wx 對(duì)象身上。 wx.Network = require("./network.js")。(在app.js里面綁定)
3. 實(shí)例如下
wx.Network.get({
    url: "xxx.xxx.xxx", // 請(qǐng)求路徑
    data: {
        a: "a"    // 參數(shù)列表
    }
  }).then(res => {
      console.log("請(qǐng)求成功")
  }).catch(res => {
      console.log("請(qǐng)求失敗")  
  })
二、登錄鎖
基本的request請(qǐng)求封裝完了后,還有一些特殊的需求,比如
1. 在首頁(yè)我會(huì)進(jìn)行登錄, 登錄后獲得token, 然后我拿著token去請(qǐng)求其他需要token才可以請(qǐng)求的接口 (比如個(gè)人購(gòu)物信息)
2. 這個(gè)時(shí)候一種做法是登錄完成前不進(jìn)行需要token的請(qǐng)求,并且有蒙板進(jìn)行攔截操作(正在登錄ing...)
3. 對(duì)于我公來(lái)說(shuō)這種方法有一個(gè)致命的弊端,就是在高并發(fā)的情況下,服務(wù)器的壓力很大,首頁(yè)的登錄接口很慢才有返回(進(jìn)首頁(yè)即自動(dòng)登錄),這個(gè)時(shí)候,用戶(hù)看到的界面就是loading,而且可能時(shí)間比較長(zhǎng),如果用戶(hù)對(duì)你的產(chǎn)品粘性不高,絕大部分人直接就走了
4. 為了優(yōu)化這種情況下的用戶(hù)體驗(yàn),我們?nèi)嫒∠说卿浀膌oading,替換成了“登錄鎖”的形式
5. 效果為未登錄調(diào)用需要token的接口時(shí),不請(qǐng)求,直到登錄完成后才會(huì)請(qǐng)求
6. 即如果這個(gè)請(qǐng)求需要token,那么先判斷有沒(méi)有登錄,如果沒(méi)有登錄,啟動(dòng)定時(shí)器一段時(shí)間后(200ms),再次判斷,如果已經(jīng)登錄,發(fā)出請(qǐng)求,如果沒(méi)有,重復(fù)以上操作

加了登錄鎖后的代碼如下: ( 添加了新的 wait 函數(shù),調(diào)用get,post,put時(shí)增加第二個(gè)參數(shù),表示是否需要token )
function baseRequest({ url, method, header, data, complete }, resolve, reject) {
  wx.request({
    url,
    method,
    header,
    data,
    success: function (res) {
      // 需要判斷服務(wù)器code的用這一段
      // 我司服務(wù)器返回0表示真正的成功,其他code表示各種錯(cuò)誤碼
      // 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
}
如何使用:(使用方式和上面一樣,只是調(diào)用的時(shí)候多一個(gè)參數(shù))
1. 將上面的代碼寫(xiě)到一個(gè)獨(dú)立的文件里,我的命名為network.js。
2. 然后將其綁定到全局的 wx 對(duì)象身上。 wx.Network = require("./network.js")。(在app.js里面綁定)
3. 實(shí)例如下
wx.Network.get({
    url: "xxx.xxx.xxx", // 請(qǐng)求路徑
    data: {
        a: "a"    // 參數(shù)列表
    }
  }, true  // 增加第二個(gè)參數(shù),true表示需要token, false表示不需要
  ).then(res => {
      console.log("請(qǐng)求成功")
  }).catch(res => {
      console.log("請(qǐng)求失敗")  
  })

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/104216.html

相關(guān)文章

  • 開(kāi)源中國(guó)專(zhuān)訪:Chameleon原理首發(fā),其它跨多端統(tǒng)一框架都是假的?

    摘要:中國(guó)互聯(lián)網(wǎng)絡(luò)信息中心發(fā)布的中國(guó)互聯(lián)網(wǎng)絡(luò)發(fā)展?fàn)顩r統(tǒng)計(jì)報(bào)告顯示,截至年月,我國(guó)網(wǎng)民規(guī)模達(dá)億人,微信月活億支付寶月活億百度月活億另一方面,中國(guó)手機(jī)占智能手機(jī)整體的比例超過(guò),月活約億。在年末正式發(fā)布了面向未來(lái)的跨端的。 開(kāi)源中國(guó)專(zhuān)訪:Chameleon原理首發(fā),其它跨多端統(tǒng)一框架都是假的? 原創(chuàng): 嘉賓-張楠 開(kāi)源中國(guó) 以往我們說(shuō)某一功能跨多端,往往是指在諸如 PC、移動(dòng)等不同類(lèi)型的設(shè)備之...

    GraphQuery 評(píng)論0 收藏0
  • 信小程序的 request 封裝

    摘要:背景之前小程序代碼混亂,所以新項(xiàng)目一開(kāi)始就準(zhǔn)備弄個(gè)微信小程序的的封裝流程先來(lái)說(shuō)說(shuō)整個(gè)流程里面已進(jìn)入就去獲取用戶(hù)信息,如果沒(méi)有登錄則默認(rèn)登錄,這里不做錯(cuò)誤處理用戶(hù)必須同意授權(quán)才能進(jìn)行操作,如果不同意授權(quán)則會(huì)一直跳轉(zhuǎn)到授權(quán)頁(yè)面在授權(quán)頁(yè)面點(diǎn)擊授權(quán) 背景 之前小程序代碼混亂,所以新項(xiàng)目一開(kāi)始就準(zhǔn)備弄個(gè)微信小程序的 request 的封裝 流程 先來(lái)說(shuō)說(shuō)整個(gè)流程: appjs 里面已進(jìn)入就去獲...

    bang590 評(píng)論0 收藏0
  • 信小程序的 request 封裝

    摘要:背景之前小程序代碼混亂,所以新項(xiàng)目一開(kāi)始就準(zhǔn)備弄個(gè)微信小程序的的封裝流程先來(lái)說(shuō)說(shuō)整個(gè)流程里面已進(jìn)入就去獲取用戶(hù)信息,如果沒(méi)有登錄則默認(rèn)登錄,這里不做錯(cuò)誤處理用戶(hù)必須同意授權(quán)才能進(jìn)行操作,如果不同意授權(quán)則會(huì)一直跳轉(zhuǎn)到授權(quán)頁(yè)面在授權(quán)頁(yè)面點(diǎn)擊授權(quán) 背景 之前小程序代碼混亂,所以新項(xiàng)目一開(kāi)始就準(zhǔn)備弄個(gè)微信小程序的 request 的封裝 流程 先來(lái)說(shuō)說(shuō)整個(gè)流程: appjs 里面已進(jìn)入就去獲...

    forrest23 評(píng)論0 收藏0
  • 信小程序的 request 封裝

    摘要:背景之前小程序代碼混亂,所以新項(xiàng)目一開(kāi)始就準(zhǔn)備弄個(gè)微信小程序的的封裝流程先來(lái)說(shuō)說(shuō)整個(gè)流程里面已進(jìn)入就去獲取用戶(hù)信息,如果沒(méi)有登錄則默認(rèn)登錄,這里不做錯(cuò)誤處理用戶(hù)必須同意授權(quán)才能進(jìn)行操作,如果不同意授權(quán)則會(huì)一直跳轉(zhuǎn)到授權(quán)頁(yè)面在授權(quán)頁(yè)面點(diǎn)擊授權(quán) 背景 之前小程序代碼混亂,所以新項(xiàng)目一開(kāi)始就準(zhǔn)備弄個(gè)微信小程序的 request 的封裝 流程 先來(lái)說(shuō)說(shuō)整個(gè)流程: appjs 里面已進(jìn)入就去獲...

    Kahn 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<