一级片大奶子_色又黄又爽18禁免费视频_热久久久久久久_久久久精品一区二区_日韩av不卡在线播放_精品国内自产拍在线观看视频

注冊登錄

微信小程序開發點擊按鈕常見問題解決

2020-09-28
導讀:2017年6月14日,微信小程序開發點擊按鈕已經是當下最熱門的話題,下面將從多方面來談微信小程序開發點擊按鈕相關的內容。...

微信小程序開發點擊按鈕已經是當下最熱門的話題,下面將從多方面來談微信小程序開發點擊按鈕相關的內容。

在互聯網應用中,我們經常用到的場景,比如用戶點擊某個按鈕,觸發的操作會和后臺api進行數據交互,生成一些記錄,比如下單購買。如果后臺api請求比較慢,而客戶端體驗又做得不到位,導致用戶以為沒點擊到或者是頁面假死,在上次請求還沒處理完,就再次點擊按鈕。這樣會導致某個操作生成多次記錄,導致一些異常的bug。

很顯然,后臺的api在這方面是需要做好處理。然而,面對用戶,我們需要更好的體驗,可以在客戶端去避免這些問題,前置地解決問題。

最近聽產品經理常說,用戶點擊某個按鈕多次,后臺還沒處理完導致多筆記錄生成,我們需要在用戶點擊后跳轉到一個新的頁面,其實這根本不是跳頁問題,是程序問題。如果程序員真這么干,是不是要下崗了。

以前偷懶的時候,在前端我們可能會這么處理:

 

var getUserDataFlag = false;

function getUserData() {

 if (getDataFlag) {

   return;

 }

 getDataFlag = true;

 $.ajax({

   url: '/xxx/getUser',

   success: function () {

     getUserData = false;

     //todo

   },

   error: function () {

     getUserData = false;

   }

 })

}

//當接口很多的時候,我們的代碼就變成這樣

var getUserAssetFlag = true;

function getUserAsset() {

 if (getDataFlag) {

   return;

 }

 getDataFlag = true;

 $.ajax({

   url: '/xxx/getUserAsset',

   success: function () {

     getUserAssetFlag = false;

     //todo

   },

   error: function () {

     getUserAssetFlag = false;

   }

 })

}

 

上面的例子你會發現,當接口越來越多,維護請求狀態的變量將會越來越多,并且當存在依賴時,維護成本更高,也更容易出錯。

如何優雅地解決這樣的問題,其實封裝一下請求就能簡單又能自動地處理這個問題。

下面我們以微信小程序請求后臺數據為例解說:

 

import {isObject} from './util'

 

let Promise = require('../libs/bluebird.min')

let requestList = {} //api請求記錄

 

// 將當前請求的api記錄起來

export function addRequestKey (key) {

   requestList[key] = true

}

 

// 將請求完成的api從記錄中移除

export function removeRequestKey (key) {

   delete requestList[key]

}

 

//當前請求的api是否已有記錄

export function hitRequestKey (key) {

   return requestList[key]

}

 

// 獲取串行請求的key,方便記錄

export function getLockRequestKey (data) {

   if (!isObject(data)) {

       return data

   }

   let ajaxKey = 'lockRequestKey:'

   try {

       ajaxKey += JSON.stringify(data)

   } catch (e) {

       ajaxKey += data

   }

   return ajaxKey

}

 

//根據請求的地址,請求參數組裝成api請求的key,方便記錄

export function getRequestKey (data) {

   if (!isObject(data)) {

       return data

   }

   let ajaxKey = 'Method: ' + data.method + ',Url: ' + data.url + ',Data: '

   try {

       ajaxKey += JSON.stringify(data.data)

   } catch (e) {

       ajaxKey += data.data

   }

   return ajaxKey

}

//所有與服務器進行http請求的出口

export function http (data) {

   if (!isObject(data)) {

       throw Error('ajax請求參數必須是json對象: ' + data)

   }

   data.method = (data.method || 'GET').toUpperCase()

   //下面5行是對所有http請求做防重復請求處理,后面單獨分享原理

   let ajaxKey = getRequestKey(data)

   if (hitRequestKey(ajaxKey)) {

       throw Error('重復提交請求:' + ajaxKey)

   }

   addRequestKey(ajaxKey)

   //bluebird.js包裝成promisepromise api

   return new Promise(function (resolve, reject) {

       //通過wx.request api 向服務器端發出http請求

       wx.request({

           url: data.url,

           data: data.data,

           method: data.method,

           header: data.header || {'Content-Type': 'application/json'},

           complete: function (res) {

               // 請求完成,釋放記錄的key,可以發起下次請求了

               removeRequestKey(ajaxKey)

               let statusCode = res.statusCode

               if (statusCode === 200 || statusCode === 304) {

                   return resolve(res.data)

               }

               return reject(res)

           }

       })

   })

}

 

//通用get請求方法

export function httpGet (data) {

   return http(data)

}

 

//通用post請求方法

export function httpPost (data) {

   data.method = 'POST'

   return http(data)

}

 

// 該方法適用于串行請求的api

export function lockRequest (data, fn) {

   let ajaxKey = getLockRequestKey(data)

   if (hitRequestKey(ajaxKey)) {

       throw Error('重復提交請求:' + ajaxKey)

   }

   addRequestKey(ajaxKey)

   return new Promise(function (resolve, reject) {

       fn(data)

           .then(function (data) {

               removeRequestKey(ajaxKey)

               return resolve(data)

           })

           .catch(function (error) {

               removeRequestKey(ajaxKey)

               return reject(error)

           })

   })

}

 

整體思路就是統一所有請求的入口,然后以API請求的地址,參數,請求類型(get,post)等組裝為唯一key緩存起來。這樣就能知道某個請求的完成狀態,當第二個相同的請求過來時,我們可以根據上一次的狀態來判斷下一步的操作。

 


重磅推薦:小程序開店目錄

第一部分:小商店是什么

第二部分:如何開通一個小商店

第三部分:如何登錄小商店

第四部分:開店任務常見問題

第五部分:小商店可以賣什么

第六部分:HiShop小程序特色功能

第七部分:小程序直播

第八部分:小程序收貨/物流

第九部分:小程序怎么結算

第十部分:小程序客服

第十一部分:電商創業

第十二部分:小程序游戲開發

電話咨詢 微信咨詢 預約演示 0元開店
主站蜘蛛池模板: 爱情到此为止在线观看|精品热99|老熟女多次高潮露脸视频|91国偷自产一区二区三区老熟女|美女久久久久久久久|高潮VPSWINDOWS国产乱 | 中文字幕无码专区人妻系列|日本欧美国产一区二区|亚洲另类小说乱|国产在线第一区二区三区|上海少妇高潮狂叫喷水了|国产一级午夜一级在线观看 亚洲乱小说|未满十八18禁止免费无码网站|日韩=av免费网址|在线国v免费看|人成午夜大片免费视频77777|亚洲激情影院 | 日韩三级在线免费观看|久久艹艹|色爱综合另类图片=av|国内久久精品视频|xx69在线观看|亚洲国产一区二区精品 | 蜜臀=aⅴ精品一区二区三区|5c5c5c5c|午夜免费|四虎影视最新免费版|色噜噜狠狠狠狠色综合久|精品服丝袜无码视频一区|国产一区日韩一区 | 久久99香蕉|中国XXX农村性视频|亚洲=aV日韩=aV男人的天堂在线|国产v亚洲v天堂=a|亚洲|这里只有精品在线播放|三年片在线视频中国 | 91精品国产综合久久香蕉最新版|久久97久久|国产福利三区|华人在线视频|mm1313美女视频|一区二区免费播放 | 日本免费一区二区三区日本|特=a级片|人人看人人做|乱码精品一卡二卡无卡|经典一区二区三区|国产999在线观看 | j=ap=anese熟睡侵犯|无码精品日韩中文字幕|国产黄色在线看|欧美高清g=ayxxx|日韩每日更新|777777影院 | 亚洲第一精品视频在线观看|欧美=a在线观看|免费国产美女爽到喷出水来视频|曰本三级在线|中文无码精品=a∨在线观看|在线观看日本黄色片 | 牛牛热在线视频|久久精品2024|久久久久久国产一区二区三区|波多野结衣乳巨码无在线观看|亚洲综合色视频在线观看|草的爽=aV导航 | 国产成人精品视频一区二区不卡|欧美日韩色另类综合|中文字幕在线欧美|免费视频日韩|国产精品第七十二页|天天草狠狠干 | 成人黄色网址大全|轻点好疼好大好爽视频|欧洲女人牲交性开放视频|377人体粉嫩噜噜噜|伊人热热久久原色播放WWW|在线色网站 国产精品一区二区三区不卡视频|精品国产人成在线|成人久久秘|少妇性l交大片7724com|九色自拍蝌蚪|欧美黄动漫 | 亚洲综合中文网|www.=av免费观看|成人免费乱码大片=a毛片软件|男人操女人逼视频网站|国产精品99爱免费视频|蜜臀=av网址 | hh99me福利毛片|18国产精品白浆在线观看免费|无码午夜人妻一区二区三区不卡视频|免费看无码自慰一区二区|亚洲一区二区卡|天天操天天艹 | 婷婷综合久久狠狠色99H|精品国偷自产在线视频99|999久久久无码国产精品|国产精品一区二三区|激情中文小说区图片区|国产亚洲日 | 欧美区二区三区|大美女一区二区三区|午夜国产精品影院在线观看|日本丰满人妻久久久久久久|99视频精选|丰满人妻熟妇乱又伦精品劲 | 日韩二区精品|亚洲操p|c=aoporn97免费公开视频|国产精品情侣高潮呻吟|免费国产内射|中文字字幕中文在线无码乱码 | #NAME?|天天澡天天弄天天摸|欧美日韩爱爱|亚洲欧美成=aⅴ人在线观看|久久青草伊人|日韩亚=av无码一区二区三区 | 国产成人=a=a在线视频|欧美三级不卡在线观线看|误杀2免费观看|freesex欧美喷水|日本国产在线|成人一二区 | 49vv亚洲|成人一级网站|九月婷婷人人澡人人添人人爽|国产精品69毛片高清亚洲|五月婷婷天堂|特黄=a级毛片免费视频 | 成人一区二区三区免费视频|日本=a=a=a=a片毛片免费观蜜桃|在线观看亚洲欧美|日本一夲道无码不卡免费视频|穿乳环蒂环上锁调教老师|国产成人综合一区二区三区 | 艳魔大战4春荡女淫|97超碰免费观看|台湾佬成人网|亚洲性爱视频|无码精品一区二区三区免费视频|国产污视频在线播放 | 午夜特片|中文久久久久|亚洲精品美女色诱在线播放|大地资源在线观看视频在线|99久久婷婷国产综合精品免费|豪放女大兵免费观看bd www欧美精品|成全在线观看免费高清动漫|富婆推油偷高潮叫嗷嗷叫|久久做受WWW|韩国羞羞|日韩亚洲欧美中文三级 | 国产黑人在线|日韩免费在线观看|99视频这里只有|麻豆国产一区|亚洲GV天堂无码男同在线观看|亚洲=aV中文无码字幕色三 | yell视频在线观看免费|www.三级影片.com|午夜啪啪片|色爱亚洲|顶级欧美熟妇高潮xxxxx|紧缚调教一区二区三区视频 | 日本真人边吃奶边做爽动态图|青娱乐激情视频|日本熟妇人妻XXXXX免费看|日本天堂免费|国产麻豆xxxxhdfree|亚洲码欧美码一区二区三区 | 91日韩免费|日本精品视频|免费的又色又爽又黄的片|无码视频一区二区三区|日韩成人无码网|亚州欧美一区二区 | 国产免费啪啪|亚洲=aV=aV天堂=av在线精品一区二区|超碰97在线免费观看|亚洲看片wwwwf5con|97黑人性色浪潮91久久|殴美一级片 | 黄视频日本|超碰=av免费|婷婷色综合视频在线观看|午夜免费视频|久色网站|成人网在线 | 日韩=a网|超碰=av在线|国产综合久|三级视频在线|久久精品毛片免费观看|护士精品一区二区三区99 | #NAME?|亚洲中文字幕无码=av在线|久久天天躁狠狠躁夜=av|91视频免费入口|午夜三级=a三级三点在线观看|国产乱码字幕精品高清=av | 成人一区在线视频|成人一区二区在线播放|新婚少妇毛茸茸的性|永久免费黄色大片|欧美精品一区在线观看|国产情侣久久久久=aⅤ免费 | 日本三级精品视频|国产人妻人伦精品无码|国产毛片久久久久久|奇米网首页|亚洲精品久久久打桩机小说|欧美一区二区三区成人 | 国产同事露脸对白在线视频|91在线91|国产免费看=av大片的网站吃奶|精品国产鲁一鲁一区二区张丽|国产对白久久|5lⅴ精品国产91久久 | 国产精品麻豆高潮刺激=a片|国产=aⅴ无码专区亚洲=av|草草在线视频|亚洲日韩精品无码专区加勒比|国产精品激情|成全视频观看免费高清第6季 | 久久精品国产2020|在线国产99|中文字幕视频一区|精品免费久久久|欧美性XXXX丰满极品少妞|欧美精品1区2区 | 青青久草视频在线|波多野结衣中文字幕一区二区|美女天天操|日韩成人午夜视频|91中文字幕网|99久视频 | 啊啊啊好爽啊|日韩性活大片|亚洲=aV日韩=aV综合在线观看|野花社区WWW在线高清观看|亚洲最黄视频|最新黄色=av | 伊人5566|久久久久久久久久久影视|国产精品正在播放|精品久久黄色|成人免费看黄yyy456|欧美伊香蕉久久综合网99 | 成色视频|欧美一级视频免费看|粉嫩=av一区二区在线播放|国产精品女丝袜白丝袜|两性午夜视频|99热在线精品国产观看 | 高清视频在线播放|天堂资源在线www中文|无码人妻=aⅤ一区二区三区|亚洲一区中文字幕永久在线|中文字幕第27页|免费69视频 |