国产亚洲欧美人成在线,免费视频爱爱太爽了无码,日本免费一区二区三区高清视频 ,国产真实伦对白精彩视频

歡迎您光臨深圳塔燈網(wǎng)絡(luò)科技有限公司!
電話圖標(biāo) 余先生:13699882642

網(wǎng)站百科

為您解碼網(wǎng)站建設(shè)的點(diǎn)點(diǎn)滴滴

小程序技能進(jìn)階回憶錄 - 如何自主實(shí)現(xiàn)攔截器

發(fā)表日期:2019-11 文章編輯:小燈 瀏覽次數(shù):4649

窗外,是5月明媚的陽(yáng)光,澄澈蔚藍(lán)的天空,有炮彈歡快地叫著飛過(guò)。50多年過(guò)去了,我依然如此清晰地記得。

在一些框架中發(fā)現(xiàn)會(huì)提供一個(gè)很實(shí)用的功能:攔截器(interceptor)。例如要實(shí)現(xiàn)這個(gè)需求:小程序每次獲取到定位后都存到 globalData 里:

wx.getLocation({
  // ..
  success(res) {
    getApp().globalData.location = res
    // ...
  }
})

如果每一處使用 wx.getLocation 的地方都這么寫(xiě)也沒(méi)啥大問(wèn)題,但總顯得不夠“智能”,一方面是多了重復(fù)代碼,另一方面如果需求變動(dòng),獲取到定位后存到別的地方,那要改很多次。

優(yōu)雅的攔截器

有了攔截器,可以更優(yōu)雅的實(shí)現(xiàn)它:

intercept('getLocation', {
  success(res) {
    getApp().globalData.location = res
  }
})

只要在一處定義如上的攔截器,其他地方直接用 wx.getLocation 即可。那么,如何實(shí)現(xiàn)上面的方式呢?

實(shí)現(xiàn) intercept 方法

// utils/intercept.js
// 存儲(chǔ)攔截器定義
var interceptors = {}
function intercept(key, config) {
  intercept[key] = config
}
export {
  intercept,
  interceptors
}

很簡(jiǎn)單,暴露出 intercept 方法,定義一個(gè)存儲(chǔ)器也一并暴露出去。

代理 wx

要實(shí)現(xiàn)使用 wx.getLocation 自動(dòng)應(yīng)用攔截器,就必須基于原有方法重新定義它。

import { interceptors } from './intercept'

// 備份原有微信方法
var wxBackup = {}
[
  'getLocation'
  // 還可以有很多其他方法 ...
].forEach((key) => {
  wxBackup[key] = wx[key]
  wx[key] = (config) => {
    if (interceptors[key]) {
      // 備份業(yè)務(wù)代碼傳入的回調(diào)方法
      var backup = {}
      var interceptor = interceptors[key]
      [
        'success',
        'fail',
        'complete'
      ].forEach((k) => {
        backup[k] = config[k]
        config[k] = (res) => {
          interceptor[k](res)
          backup[k](res)
        }
      })
    }
    wxBackup[key](config)
  }
})

當(dāng)然,上述代碼用數(shù)組列出了所有可能被定義攔截器的微信函數(shù),也可以使用 Object.keys(wx) 通用處理。

更多使用場(chǎng)景

上面的場(chǎng)景比較簡(jiǎn)單,攔截器的應(yīng)用還有更多場(chǎng)景。比如每次請(qǐng)求傳參帶上公參經(jīng)緯度,接口返回的數(shù)據(jù)都會(huì)約定包裹在 object 中,請(qǐng)求回來(lái)需要取一遍。數(shù)據(jù)異常時(shí)還要針對(duì)錯(cuò)誤碼做特定處理,就可以很方便的用攔截器處理:

intercept('request', {
  data(data) {
    var location = getApp().globalData.location
    data.location = location.latitude + ',' + location.longitude
    return data
  },
  success(res) {
    if (res.code == 200) {
      return res.object
    } else {
      if (res.code == 'xxx') {
        // 登錄失效,重新登錄
        // ....
      }
    }
  }
})

注意,攔截器函數(shù)里多了返回值,具體實(shí)現(xiàn)方法就不多寫(xiě),基于上述實(shí)現(xiàn)完善代碼即可。

總結(jié)

細(xì)心的讀者可能發(fā)現(xiàn),我們代理或者改造了很多微信提供的方法,有些開(kāi)發(fā)者可能不喜歡這樣,希望保持原有代碼的純潔性。這要看團(tuán)隊(duì)喜好吧,基于此考慮,主要是不想定義太多新的方法或 api,盡量以大家最為熟悉的方式書(shū)寫(xiě)代碼。


本頁(yè)內(nèi)容由塔燈網(wǎng)絡(luò)科技有限公司通過(guò)網(wǎng)絡(luò)收集編輯所得,所有資料僅供用戶學(xué)習(xí)參考,本站不擁有所有權(quán),如您認(rèn)為本網(wǎng)頁(yè)中由涉嫌抄襲的內(nèi)容,請(qǐng)及時(shí)與我們聯(lián)系,并提供相關(guān)證據(jù),工作人員會(huì)在5工作日內(nèi)聯(lián)系您,一經(jīng)查實(shí),本站立刻刪除侵權(quán)內(nèi)容。本文鏈接:http://jstctz.cn/25245.html
相關(guān)小程序
 八年  行業(yè)經(jīng)驗(yàn)

多一份參考,總有益處

聯(lián)系深圳網(wǎng)站公司塔燈網(wǎng)絡(luò),免費(fèi)獲得網(wǎng)站建設(shè)方案及報(bào)價(jià)

咨詢相關(guān)問(wèn)題或預(yù)約面談,可以通過(guò)以下方式與我們聯(lián)系

業(yè)務(wù)熱線:余經(jīng)理:13699882642

Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.