最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

小程序如何自主實現(xiàn)攔截器的示例代碼

 更新時間:2022年05月20日 09:32:25   作者:binnng  
這篇文章主要介紹了小程序如何自主實現(xiàn)攔截器,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

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

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

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

優(yōu)雅的攔截器

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

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

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

實現(xiàn) intercept 方法

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

很簡單,暴露出 intercept 方法,定義一個存儲器也一并暴露出去。

代理 wx

要實現(xiàn)使用 wx.getLocation 自動應(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) 通用處理。

更多使用場景

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

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ù)里多了返回值,具體實現(xiàn)方法就不多寫,基于上述實現(xiàn)完善代碼即可。

總結(jié)

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • javascript實現(xiàn)鼠標(biāo)移到Image上方時顯示文字效果的方法

    javascript實現(xiàn)鼠標(biāo)移到Image上方時顯示文字效果的方法

    這篇文章主要介紹了javascript實現(xiàn)鼠標(biāo)移到Image上方時顯示文字效果的方法,涉及javascript鼠標(biāo)事件及圖文屬性動態(tài)設(shè)置的相關(guān)技巧,可用于為圖片增加文字提示效果,需要的朋友可以參考下
    2015-08-08
  • 微信小程序?qū)崿F(xiàn)Timeline時間線效果

    微信小程序?qū)崿F(xiàn)Timeline時間線效果

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)Timeline時間線效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 淺談Webpack下多環(huán)境配置的思路

    淺談Webpack下多環(huán)境配置的思路

    這篇文章主要介紹了淺談Webpack下多環(huán)境配置的思路,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • 側(cè)欄跟隨滾動的簡單實現(xiàn)代碼

    側(cè)欄跟隨滾動的簡單實現(xiàn)代碼

    側(cè)欄里的有些內(nèi)容滾動到頁面頂端以后就固定在那個位置,不再跟隨滾動條而滾動,想必很多站長朋友都想實現(xiàn)這個效果吧,接下來為大家詳細(xì)介紹下,感興趣的你可不要錯過了哈
    2013-03-03
  • Cropper.js入門之在HTML中實現(xiàn)交互式圖像裁剪

    Cropper.js入門之在HTML中實現(xiàn)交互式圖像裁剪

    這篇文章主要為大家介紹了Cropper.js入門之在HTML中實現(xiàn)交互式圖像裁剪示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • JavaScript Event事件學(xué)習(xí)第一章 Event介紹

    JavaScript Event事件學(xué)習(xí)第一章 Event介紹

    Events是每一個JavaScript程序核心。什么是事件處理,它有什么問題和怎樣寫出跨瀏覽器的代碼,我將在這一章做一個概述。我也會提供一些有精彩的關(guān)于事件處理程序的細(xì)節(jié)的文章。
    2010-02-02
  • three.js中聚光燈及其屬性介紹小結(jié)

    three.js中聚光燈及其屬性介紹小結(jié)

    本文主要介紹了three.js中聚光燈及其屬性介紹小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • JavaScript簡單判斷復(fù)選框是否選中及取出值的方法

    JavaScript簡單判斷復(fù)選框是否選中及取出值的方法

    這篇文章主要介紹了JavaScript簡單判斷復(fù)選框是否選中及取出值的方法,涉及javascript遍歷復(fù)選框及元素取值的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • 微信小程序vant?輸入框問題處理方案

    微信小程序vant?輸入框問題處理方案

    這篇文章主要介紹了微信小程序vant輸入框問題,本文給大家分享完美解決方案,結(jié)合實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • js獲取對象、數(shù)組的實際長度,元素實際個數(shù)的實現(xiàn)代碼

    js獲取對象、數(shù)組的實際長度,元素實際個數(shù)的實現(xiàn)代碼

    下面小編就為大家?guī)硪黄猨s獲取對象、數(shù)組的實際長度,元素實際個數(shù)的實現(xiàn)代碼。小編覺得挺不錯的,現(xiàn)在就分享 給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06

最新評論

同心县| 宽城| 神农架林区| 抚顺县| 确山县| 芜湖县| 扶绥县| 叶城县| 涟源市| 长海县| 东宁县| 兴隆县| 红原县| 拉萨市| 瓮安县| 加查县| 桦川县| 乐昌市| 朝阳县| 独山县| 福安市| 葫芦岛市| 固安县| 南通市| 大庆市| 永吉县| 昌图县| 汉沽区| 余干县| 神池县| 比如县| 彭州市| 辽宁省| 团风县| 台中市| 逊克县| 黎川县| 新疆| 石狮市| 晴隆县| 汉沽区|