日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

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

瀏覽:208日期: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
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品麻豆久久| 久久国产精品99国产| 日韩欧美一区二区三区在线观看 | 欧美日韩色图| 久久99蜜桃| 日韩av不卡一区二区| 欧美综合国产| 伊人精品一区| 国产亚洲一卡2卡3卡4卡新区| 丝袜诱惑制服诱惑色一区在线观看| 国产精品久久久久久久免费观看| 国产调教一区二区三区| 丝袜国产日韩另类美女| 久久久久国产| 亚洲黄色网址| 国产在线不卡一区二区三区| 久久国产人妖系列| 亚洲精品国模| 日韩午夜电影| 麻豆91精品视频| 日韩专区视频网站| 老司机精品久久| 亚洲成人日韩| 亚洲永久av| 国产精品一区二区三区av麻| 婷婷精品在线| 夜夜嗨一区二区三区| 欧美日韩国产高清电影| 久久婷婷久久| 亚洲手机视频| 伊人精品在线| 老鸭窝毛片一区二区三区| 1024精品一区二区三区| 欧美亚洲国产激情| 精品国产乱码久久久| 国产精品一区二区三区美女| 久久激情综合网| 欧美日韩亚洲一区三区| 免费不卡在线观看| 中文字幕一区二区三区四区久久 | 五月综合激情| 91久久国产| 亚洲精品一二三区区别| 99视频精品全国免费| 亚洲午夜黄色| 好吊日精品视频| 丝袜亚洲精品中文字幕一区| 国产婷婷精品| 亚洲一区欧美| 亚洲精品字幕| 日韩精品a在线观看91| 欧美偷窥清纯综合图区| 国产亚洲一区二区三区啪| 国产三级精品三级在线观看国产| 国产精品宾馆| 国产精品地址| 超级白嫩亚洲国产第一| 亚洲成人va| 亚洲国产一区二区三区在线播放| 9色精品在线| 亚洲18在线| 亚洲综合激情在线| 视频一区在线视频| 欧美日本不卡| 精品国产鲁一鲁****| 国产麻豆久久| 久久亚洲色图| 国产欧美日韩在线一区二区 | 久久五月天小说| 美女被久久久| 国产精品日韩精品中文字幕| 精品72久久久久中文字幕| 日韩精品一区二区三区免费观影| 亚洲激情欧美| 日韩精品欧美| 蜜桃av一区二区在线观看| 国产精品高清一区二区| 成人小电影网站| 蜜桃久久精品一区二区| 美女国产一区二区三区| 丝袜av一区| 欧美在线亚洲综合一区| 欧美日一区二区三区在线观看国产免| av资源中文在线| 热久久免费视频| 精品三级在线| 视频在线观看91| 国产精品亲子伦av一区二区三区| 秋霞影视一区二区三区| 婷婷综合五月| 久久国产精品色av免费看| 久久九九电影| 国产亚洲福利| 欧美成人一二区| 亚洲欧美网站| 国内精品美女在线观看| 香蕉精品999视频一区二区| 免费在线亚洲| 石原莉奈在线亚洲二区| 麻豆91精品91久久久的内涵| 精品日韩毛片| 欧美日本精品| 欧美日韩四区| 毛片不卡一区二区| 日韩中文字幕91| 久久国产欧美| 亚洲黄色中文字幕| 久久这里只有精品一区二区| 日本在线一区二区三区| 亚洲综合日本| 欧美日韩免费观看一区=区三区 | 亚洲婷婷丁香| 欧美专区在线| 欧美理论视频| 欧美aa国产视频| 久久国产亚洲| 国语对白精品一区二区| 国产精品白浆| 国产精品66| 欧美三级第一页| 四虎成人精品一区二区免费网站| 午夜一区在线| 亚洲主播在线| 欧美一区三区| 久久久久午夜电影| 99久久夜色精品国产亚洲狼| 日韩国产一区| 国产99在线| 日韩大片在线| 欧洲一区二区三区精品| 国产 日韩 欧美一区| 92国产精品| 欧洲亚洲一区二区三区| 韩国三级一区| 久久网站免费观看| 亚洲欧美伊人| 午夜在线视频观看日韩17c| 视频一区免费在线观看| 亚洲欧美在线综合| 亚洲毛片视频| 国产精品最新| 九九久久国产| 欧美日韩免费观看视频| 精品欧美一区二区三区在线观看| 久久中文字幕二区| 日韩视频一区| 天堂成人国产精品一区| 亚州av一区| 国产精品天堂蜜av在线播放| 精品国产一区二区三区2021| 成人在线免费观看网站| 久久久久国产精品一区二区| 亚洲国内欧美| 免费人成网站在线观看欧美高清| 无码日韩精品一区二区免费| 欧美午夜三级| 国产aⅴ精品一区二区四区| 丝袜av一区| 蜜桃视频一区二区三区在线观看| 欧美视频一区| 高清av不卡| 99国产精品| 欧美一区成人| 亚洲伊人av| 久久aⅴ国产紧身牛仔裤| 911亚洲精品| 一区二区三区四区日本视频| 午夜在线观看免费一区| 日韩不卡手机在线v区| 久久伊人国产| 激情五月色综合国产精品| 亚洲综合图色| 动漫av一区| 午夜在线精品| 久久这里只有| 最新国产拍偷乱拍精品| 日本a口亚洲| 欧美国产偷国产精品三区| 在线亚洲一区| 国产精品v亚洲精品v日韩精品| 欧美日韩国产v| 亚洲伊人影院| 97精品国产| 免费在线成人网| 国产成人精品999在线观看| 夜夜精品视频| 美女视频免费精品| 午夜欧美精品| 欧美a在线观看| 另类亚洲自拍| 国产精品99一区二区三区| 亚洲视频播放| 激情不卡一区二区三区视频在线| 宅男噜噜噜66国产日韩在线观看| 国产精品玖玖玖在线资源| 2023国产精品久久久精品双| 久久激五月天综合精品| 欧美日韩激情在线一区二区三区| 国产伦精品一区二区三区在线播放 | 亚洲三级毛片|