成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

vue路由切換時取消之前的所有請求操作

瀏覽:171日期:2022-12-01 14:59:27

在main.js文件里

import router from ’router/’;import Vue from ’vue’;Vue.Cancel = [];router.beforeEach((to, from, next) => { while (Vue.Cancel.length > 0) { Vue.Cancel.shift()(’cancel’); } next();})

ajax文件

import Vue from ’vue’;import axios from ’axios’;import VueAxios from ’vue-axios’;Vue.use(VueAxios, axios);// 導入封裝的回調函數import { cbs, gbs} from ’config/’;// 動態設置本地和線上接口域名Vue.axios.defaults.baseURL = gbs.host;/** * 封裝axios的通用請求 * @param {string} type get或post * @param {string} url 請求的接口URL * @param {object} data 傳的參數,沒有則傳空對象 * @param {object} urlParams url傳參 * @param {Function} fn 回調函數 * @param {boolean} tokenFlag 是否需要攜帶token參數,為true,不需要;false,需要。一般除了登錄,都需要 */export default function ({ type, path, data, params, urlParams, fn, errFn, tokenFlag, headers, opts} = {}) { var options = { method: type, url: path, params: params, headers: headers && typeof headers === ’object’ ? headers : {}, cancelToken: new axios.CancelToken(function (cancel) { Vue.Cancel && Vue.Cancel.push(cancel) }) }; //檢測接口權限 var api_flag = true; if (options.url && options.url.indexOf(gbs.host) && this.$store.state.user.userinfo.access_status === 1) { var url = options.url.replace(gbs.host, ’’); var api_routers = this.$store.state.user.userinfo.api_routers; if (!api_routers || !api_routers.constructor === Object || !api_routers[url]) { api_flag = false; } } var urlParamsArray = []; if (api_flag === true) { options[type === ’get’ ? ’params’ : ’data’] = data; // 用于url傳參 if (typeof (urlParams) == 'object') { for (var k in urlParams) { urlParamsArray.push(k + ’=’ + urlParams[k]) } options.url += ’?’ + urlParamsArray.join(’&’); } if (typeof (urlParams) == 'string' || typeof (urlParams) == 'number') { options.url += urlParams; } if(options.url.indexOf(’?’) > -1){ options.url += ’&_=’ + (new Date()).getTime(); }else{ options.url += ’?_=’ + (new Date()).getTime(); } // 分發顯示加載樣式任務 this.$store.dispatch(’show_loading’); if (tokenFlag !== true) { //如果你們的后臺不會接受headers里面的參數,打開這個注釋,即實現token通過普通參數方式傳 // data.token = this.$store.state.user.userinfo.token; options.headers.token = this.$store.state.user.userinfo.token; } //擴展Promise使支持finally(),用了babel就不用手寫了^.^ // Promise.prototype.finally=function(callback){ // let Promise = this.constructor; // return this.then( // value => Promise.resolve(callback()).then(() => value), // reason => Promise.resolve(callback()).then(() => { throw reason }) // ); // }; //發送請求 return new Promise((resolve, reject)=>{ Vue.axios(options).then((res) => { this.$store.dispatch(’hide_loading’); if (res.data[gbs.api_status_key_field] === gbs.api_status_value_field || (res.status === gbs.api_status_value_field && !res.data[gbs.api_status_key_field])) { fn(res.data); } else { if (gbs.api_custom[res.data[gbs.api_status_key_field]]) { gbs.api_custom[res.data[gbs.api_status_key_field]].call(this, res.data); } else { cbs.statusError.call(this, res.data); if (errFn) { errFn.call(this, res.data); } } } resolve(res.data); }).catch((err) => { if(err.response && err.response.status !== 403){ try{ errFn?errFn.call(this, this.$$lib__.isObject(err.response.data) ? err.response.data : {}):null; }catch(err){ console.error(err.message); } } if(err.response && err.response.data === ’’){ cbs.statusError.call(this, {status: err.response.status}); } else if (err.response && this.$$lib__.isObject(err.response.data)) { cbs.statusError.call(this, err.response.data); }else if(err.response){ cbs.requestError.call(this, err); } else { console.error(’Error from ’, ’'’+path+’'.’, err.message); } reject(err); }); }); } else { this.$alert(’您沒有權限請求該接口!’, ’請求錯誤’, { confirmButtonText: ’確定’, type: ’warning’ }); }};

核心代碼為cancelToken參數

var options = { method: type, url: path, params: params, headers: headers && typeof headers === ’object’ ? headers : {}, cancelToken: new axios.CancelToken(function (cancel) { Vue.Cancel && Vue.Cancel.push(cancel) }) };

補充知識:problem:vue組件局部刷新,在組件銷毀(destroyed)時取消刷新無效問題

場景:

一個群發消息列表(數組)

列表下有多條消息(元素)

每條正在發送的消息數據狀態需要實時刷新,發送完成時需要顯示成功提示符合且不需要刷新,然后3秒消失。首次顯示列表時,已經成功的狀態不顯示這個成功提示符。

1、定位確定采用局部刷新

2、進入消息列表請求獲取列表數據的接口,完成發送的消息不需顯示完成狀態

3、正在發送的消息首次渲染時就調用setTimeout輪詢刷新當前消息的接口,完成時,顯示完成狀態(新增一個完成狀態的字段)

4、頁面銷毀時,還在發送的消息也取消刷新

誤區:

1、每條消息沒有抽成一個單獨的組件,想要首次渲染組件調用刷新接口時,只能通過定義全局map變量來映射每條消息的刷新接口的定時器,明顯增加業務開發的復雜度,增加了一些不確定性的bug風險。

每條消息抽成組件之后,就可以在組件中的mounted中去調用刷新的接口,頁面銷毀時取消刷新可以在destroyed里面去銷毀。

2、這里的一個誤區是在destroyed里面去清除定時器的id,導致調用了destroyed鉤子刷新的定時器還是無法清除。將定時器id當做一個屬性值存在了每條數據所屬的對象中,然后在子組件(每條消息所屬的)中的destroyed中去讀取該對象的當前的定時器屬性,因為讀出來是undifined,其實并沒有拿到當前消息正在執行的定時器,所以清除不掉。

組件使用有誤,每一個組件都是一個獨立的元素,其中定義的變量也是私有的,定時器id定在當前組件的data中就可以了,不需要再在數組中的每一條消息中定一個專屬的定時器id。

抽象出來的簡單版刷新數據,5秒后取消刷新。

let intervalId = nullfunction init() { this.refresh()}function refresh() { intervalId = setTimeout(() => { this.getRefreshData() }, 2000);}function getRefreshData() { console.log(’start get data.....’, intervalId) setTimeout(() => { console.log(’get data.....’) this.refresh() }, 100); }function stopRefresh() { console.log(’stop....’, intervalId) clearInterval(intervalId)}this.init()setTimeout(() => { this.stopRefresh()}, 5000);

以上這篇vue路由切換時取消之前的所有請求操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Vue
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
色婷婷精品大视频在线蜜桃视频| 国产手机视频一区二区| 日韩视频精品| 欧美国产禁国产网站cc| 波多野结衣在线一区| 欧美三级中文字幕| 日韩av中文在线观看| 久久精品人人做人人爽电影蜜月| 亚洲精品国产无套在线观| 韩日欧美一区| 国产精品天美传媒沈樵| 午夜视频一区| 国产精品私人影院| 欧美视频四区| 久久综合99re88久久爱| 国产成a人无v码亚洲福利| 欧美放荡的少妇| 国产在线播放一区三区四| 91麻豆精品国产91久久久资源速度 | 日韩中文字幕麻豆| 色婷婷综合久久| 视频在线观看一区二区三区| 久久久久se| 蜜臀av性久久久久蜜臀aⅴ| 欧洲视频一区二区| 麻豆成人91精品二区三区| 色哟哟亚洲精品| 午夜精品一区在线观看| 国产精品尤物| 午夜精品在线看| 色偷偷成人一区二区三区91| 免费成人你懂的| 欧美日韩aaaaa| 丰满白嫩尤物一区二区| 日韩三级视频在线观看| 从欧美一区二区三区| 日韩精品一区二| 91原创在线视频| 欧美国产一区二区在线观看| 亚洲国产网站| 亚洲国产wwwccc36天堂| 日本乱人伦aⅴ精品| 国产最新精品免费| 日韩一区二区免费在线电影| 成人a级免费电影| 欧美极品美女视频| 亚洲激精日韩激精欧美精品| 亚洲一区二区av电影| 葵司免费一区二区三区四区五区| 麻豆国产91在线播放| 日韩欧美一级二级三级| 色综合一区二区三区| 国产精品初高中害羞小美女文| 亚洲精品偷拍| 亚洲成人av在线电影| 欧美亚洲国产一区在线观看网站 | 极品少妇一区二区三区| 亚洲午夜av在线| 欧美片在线播放| 99re8在线精品视频免费播放| 国产精品国产三级国产普通话99| 亚洲女优在线| 精品一区二区久久久| 久久综合视频网| 91久久综合| 免费人成网站在线观看欧美高清| 欧美一区二区三区日韩| 午夜久久资源| 午夜一区二区三区视频| 欧美一区二区视频在线观看| 91在线观看成人| 亚洲免费观看在线观看| 久久综合给合久久狠狠色| 国产精品一级二级三级| 国产精品久久久久精k8| 色激情天天射综合网| 成人激情开心网| 亚洲欧美日韩国产手机在线| 欧美性色黄大片手机版| 91在线观看一区二区| 亚洲一区二区五区| 日韩午夜av一区| av成人黄色| 精品一区二区免费在线观看| 国产欧美日韩另类视频免费观看| 一区二区日韩免费看| 国产精品中文字幕日韩精品| 欧美激情自拍偷拍| 欧美在线你懂得| 欧美性色综合| 久久精品理论片| 国产精品色呦呦| 色菇凉天天综合网| 99国产精品国产精品毛片| 亚洲不卡一区二区三区| 精品精品欲导航| 亚洲免费影院| 99国产精品一区| 日韩激情一区二区| 国产亚洲美州欧州综合国| 久久精品女人天堂| 91丨porny丨蝌蚪视频| 五月综合激情日本mⅴ| 久久久亚洲精华液精华液精华液| 亚洲一区二区三区欧美 | 成人黄色综合网站| 丝袜国产日韩另类美女| 国产区在线观看成人精品| 久久综合电影| 黄色亚洲精品| 极品少妇xxxx偷拍精品少妇| 亚洲欧美国产高清| 欧美v亚洲v综合ⅴ国产v| 久久av一区二区三区| 欧美人与禽猛交乱配视频| 国产在线精品一区二区| 一区二区三区欧美在线观看| voyeur盗摄精品| 午夜久久久久久| 国产精品伦理一区二区| 欧美在线免费播放| 亚洲国产精品综合小说图片区| av激情亚洲男人天堂| 国产欧美一区二区精品性| 欧亚一区二区三区| 亚洲国产日韩欧美一区二区三区| 国产99久久久久| 丝袜诱惑亚洲看片| 久久日韩粉嫩一区二区三区| 91黄色在线观看| 亚洲高清资源| 99精品一区二区三区| 亚洲一区二区精品视频| 欧美日韩精品一区二区三区四区 | 国产偷v国产偷v亚洲高清| 日韩一区二区三区视频| 久久99热这里只有精品| 日韩成人精品在线| 日韩视频一区| 久久一本综合频道| 中文字幕亚洲一区二区va在线| 亚洲自啪免费| 国内精品国产三级国产a久久| 欧美mv和日韩mv国产网站| 亚洲444eee在线观看| 成人精品在线视频观看| 亚洲一区二区精品在线观看| 国产麻豆视频精品| 亚洲一区二区三区三| 久久久精品日韩欧美| 欧美日韩国产a| 国产一区二区久久久| aaa欧美色吧激情视频| 国产在线精品免费| 美日韩一级片在线观看| 亚洲va欧美va天堂v国产综合| 亚洲视频一二三区| 国产网站一区二区| 精品国产污污免费网站入口 | 亚洲精品老司机| 国产精品区一区二区三区| 欧美成人性战久久| 欧美一区二区国产| 欧美精品在线一区二区| 欧美在线免费观看亚洲| 色婷婷久久久综合中文字幕| 久久久国产亚洲精品| 国产精品日韩高清| 中文高清一区| 亚洲成人中文| 伊人久久亚洲美女图片| 国产精品v欧美精品v日本精品动漫| 风间由美性色一区二区三区| 高清不卡一二三区| 成人一区二区在线观看| 国产综合一区二区| 激情综合网最新| 日韩av午夜在线观看| 偷窥少妇高潮呻吟av久久免费| 亚洲免费观看在线观看| 亚洲日本在线天堂| 亚洲欧美经典视频| 一区二区三区免费在线观看| 亚洲桃色在线一区| 日韩美女啊v在线免费观看| 亚洲欧洲成人自拍| 亚洲欧美偷拍三级| 亚洲精品综合在线| 一区二区成人在线视频| 亚洲一线二线三线视频| 亚洲一级二级在线| 91.麻豆视频| 日韩天堂在线观看| 精品剧情v国产在线观看在线| 日韩一区二区三区观看| 精品日韩在线观看| 久久亚洲欧美国产精品乐播| 久久久久久毛片| 精品国产区一区| 精品久久久久久久久久久久久久久|