vue axios重復點擊取消上一次請求封裝的方法
使用場景
重復點擊或者多tab標簽使用一個視圖等(當然也可以用加載中或者透明背景禁止請求中再次點擊)
封裝代碼
來自于互聯(lián)網(wǎng)
let pending = []; //聲明一個數(shù)組用于存儲每個請求的取消函數(shù)和axios標識 let cancelToken = axios.CancelToken; let removePending = (config) => { for(let p in pending){ if(pending[p].u === config.url + '&' + config.method) { //當當前請求在數(shù)組中存在時執(zhí)行函數(shù)體 pending[p].f(); //執(zhí)行取消操作 pending.splice(p, 1); } } } // http請求攔截器 axios.interceptors.request.use(config => { removePending(config); //在一個axios發(fā)送前執(zhí)行一下取消操作 config.cancelToken = new cancelToken((c)=>{ // 這里的axios標識我是用請求地址&請求方式拼接的字符串,當然你可以選擇其他的一些方式 pending.push({ u: config.url + '&' + config.method, f: c }); }); return Promise.resolve(config) }, error => { return Promise.reject(error) }) // http響應攔截器 axios.interceptors.response.use(data => { removePending(data.config); //在一個axios響應后再執(zhí)行一下取消操作,把已經(jīng)完成的請求從pending中移除 return Promise.resolve(data) }, error => { //加載失敗 return {'data':{}} // return Promise.reject(error) })
經(jīng)過多次測試發(fā)現(xiàn)不同請求也給我取消了,原因是沒有校驗請求參數(shù),也就是說get請求可以用,修改以下代碼
pending.push({ u: config.url + '&' + config.method, f: c });
修改為:
pending.push({ u: config.url + JSON.stringify(config.data) +'&' + config.method, f: c });//config.data為請求參數(shù)
上面判斷也需要修改,這樣get請求和post都可以用了
解決分析
(個人理解)
官方提供了axios.CancelToken來取消上一次請求方法,因此只需要判斷上一次請求是否重復。聲明數(shù)組變量 pending用于存儲每個請求實例的axios標識(請求方式,請求參數(shù),請求url)和該實例的取消函數(shù);在請求攔截器中創(chuàng)建取消函數(shù)實例,將請求的標識(判斷重復標識)及 該請求實例取消函數(shù) push到pending數(shù)組中,創(chuàng)建取消上一次請求方法 removePending,該方法主要判斷axios請求標識是否重復,重復則執(zhí)行該實例的取消函數(shù),并且從 pending中移除標識及該實例取消函數(shù)。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Vue下滾動到頁面底部無限加載數(shù)據(jù)的示例代碼
本篇文章主要介紹了Vue下滾動到頁面底部無限加載數(shù)據(jù)的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04如何隱藏element-ui中tree懶加載葉子節(jié)點checkbox(分頁懶加載效果)
這篇文章主要介紹了如何隱藏element-ui中tree懶加載葉子節(jié)點checkbox(分頁懶加載效果),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07使用vue2.6實現(xiàn)抖音【時間輪盤】屏保效果附源碼
前段時間看抖音,有人用時間輪盤作為動態(tài)的桌面壁紙,一時間成為全網(wǎng)最火的電腦屏保,后來小米等運用市場也出現(xiàn)了【時間輪盤】,有點像五行八卦,感覺很好玩,于是突發(fā)奇想,自己寫一個網(wǎng)頁版小DEMO玩玩,需要的朋友可以參考下2019-04-04springboot和vue前后端交互的實現(xiàn)示例
本文主要介紹了springboot和vue前后端交互的實現(xiàn)示例,將包括一個簡單的Vue.js前端應用程序,用于發(fā)送GET請求到一個Spring Boot后端應用程序,以獲取并顯示用戶列表,感興趣的可以了解一下2024-05-05