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

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:212日期: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);// 導(dǎo)入封裝的回調(diào)函數(shù)import { cbs, gbs} from ’config/’;// 動態(tài)設(shè)置本地和線上接口域名Vue.axios.defaults.baseURL = gbs.host;/** * 封裝axios的通用請求 * @param {string} type get或post * @param {string} url 請求的接口URL * @param {object} data 傳的參數(shù),沒有則傳空對象 * @param {object} urlParams url傳參 * @param {Function} fn 回調(diào)函數(shù) * @param {boolean} tokenFlag 是否需要攜帶token參數(shù),為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) }) }; //檢測接口權(quán)限 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(); } // 分發(fā)顯示加載樣式任務(wù) this.$store.dispatch(’show_loading’); if (tokenFlag !== true) { //如果你們的后臺不會接受headers里面的參數(shù),打開這個注釋,即實(shí)現(xiàn)token通過普通參數(shù)方式傳 // data.token = this.$store.state.user.userinfo.token; options.headers.token = this.$store.state.user.userinfo.token; } //擴(kuò)展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 }) // ); // }; //發(fā)送請求 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(’您沒有權(quán)限請求該接口!’, ’請求錯誤’, { confirmButtonText: ’確定’, type: ’warning’ }); }};

核心代碼為cancelToken參數(shù)

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) }) };

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

場景:

一個群發(fā)消息列表(數(shù)組)

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

每條正在發(fā)送的消息數(shù)據(jù)狀態(tài)需要實(shí)時刷新,發(fā)送完成時需要顯示成功提示符合且不需要刷新,然后3秒消失。首次顯示列表時,已經(jīng)成功的狀態(tài)不顯示這個成功提示符。

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

2、進(jìn)入消息列表請求獲取列表數(shù)據(jù)的接口,完成發(fā)送的消息不需顯示完成狀態(tài)

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

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

誤區(qū):

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

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

2、這里的一個誤區(qū)是在destroyed里面去清除定時器的id,導(dǎo)致調(diào)用了destroyed鉤子刷新的定時器還是無法清除。將定時器id當(dāng)做一個屬性值存在了每條數(shù)據(jù)所屬的對象中,然后在子組件(每條消息所屬的)中的destroyed中去讀取該對象的當(dāng)前的定時器屬性,因?yàn)樽x出來是undifined,其實(shí)并沒有拿到當(dāng)前消息正在執(zhí)行的定時器,所以清除不掉。

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

抽象出來的簡單版刷新數(shù)據(jù),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路由切換時取消之前的所有請求操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Vue
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲资源在线| 日韩久久99| 蜜桃成人精品| 国产亚洲人成a在线v网站| 日韩va亚洲va欧美va久久| 视频一区中文| 99视频精品全国免费| 狂野欧美性猛交xxxx| 亚洲影视一区二区三区| 中文不卡在线| 羞羞答答国产精品www一本| 欧美综合另类| 精品国产美女a久久9999| 国产高潮在线| 三上亚洲一区二区| 伊人成人在线视频| 美女网站视频一区| 中文在线免费视频| 久久久久久久久久久妇女| 黄在线观看免费网站ktv| 日韩一区亚洲二区| 亚洲国产综合在线看不卡| 日韩在线免费| 免费视频亚洲| 黄色在线一区| 一本一本久久| 深夜福利亚洲| 蜜臀av在线播放一区二区三区| 国产精品老牛| 欧美片第1页综合| 欧美另类中文字幕| 欧美国产美女| 久久精品中文| 国产日韩综合| 日韩黄色在线观看| 国产欧美日韩精品一区二区免费| 国产成人精品一区二区免费看京| 一区二区三区四区日本视频| 色偷偷偷在线视频播放| 亚洲精品国产偷自在线观看| 日韩亚洲精品在线| 91精品韩国| 亚洲精品国产日韩| 国产精品九九| 中文字幕成在线观看| 超级白嫩亚洲国产第一| 欧美片第1页| 日韩视频精品在线观看| 美国三级日本三级久久99| 国产乱码精品一区二区三区亚洲人 | 欧美成人日韩| 亚洲欧美久久久| 国产欧美啪啪| 国产白浆在线免费观看| 一区二区三区四区在线看| 日韩精品成人在线观看| 精品国产中文字幕第一页| 亚洲1区在线| 97在线精品| 国产模特精品视频久久久久| 美女性感视频久久| 亚洲网站视频| 日韩精品亚洲专区在线观看| 国产精品天天看天天狠| av综合电影网站| 日韩在线黄色| 四虎国产精品免费观看| 精品久久不卡| 免费观看在线色综合| 国产精品自拍区| 亚洲激情国产| 国产探花一区二区| 成人在线网站| 欧美日韩夜夜| 欧美日韩中文一区二区| 国产精品xxxav免费视频| 日韩三区在线| 亚洲精品日本| 亚洲成人免费| 国产精品亚洲人成在99www| 国产亚洲网站| 精品亚洲精品| 久久午夜影视| 亚洲性视频h| 国产日韩中文在线中文字幕| 欧美日韩激情| 久久av网址| 亚洲免费激情| 欧美不卡高清一区二区三区| 快she精品国产999| 92国产精品| 日本h片久久| 亚洲乱亚洲高清| 91精品亚洲| 欧美久久久网站| 黄色av日韩| 中文字幕在线免费观看视频| 91精品国产自产观看在线| 日本欧美不卡| 中文字幕av一区二区三区人| 亚洲精品888| 美女精品久久| 国产图片一区| 丝袜美腿亚洲一区二区图片| 国产福利资源一区| 免费在线观看一区二区三区| 国产粉嫩在线观看| 国产+成+人+亚洲欧洲在线| 日韩精品一区第一页| 国产成人精选| 久久久国产精品网站| 婷婷视频一区二区三区| 狠狠色综合网| 日韩国产欧美| 国产精品毛片久久久| 日本视频在线一区| 亚洲资源av| 99热免费精品| 成人羞羞在线观看网站| 你懂的国产精品| 精品视频在线你懂得| 日本不卡视频一二三区| 日本亚洲欧美天堂免费| 欧美日韩四区| 伊人久久视频| 成人日韩在线观看| 福利在线免费视频| 欧美成人精品午夜一区二区| 91国内精品| 久久av免费| 国产日韩免费| 久久国产88| 男人的天堂久久精品| 亚洲综合另类| 蜜臀91精品一区二区三区| 欧美~级网站不卡| 99日韩精品| 久久xxxx| 日韩高清中文字幕一区二区| 欧美不卡高清一区二区三区| av高清一区| 午夜欧美视频| 欧美日韩在线观看视频小说| 欧美色图国产精品| 91精品国产乱码久久久久久久| 日韩欧美精品| 五月天激情综合网| 欧美日韩国产综合网| 亚洲三级网址| 亚洲精品在线二区| 麻豆精品91| 国产亚洲观看| 美女高潮久久久| 色在线视频观看| 免费在线小视频| 91成人精品视频| 日韩中文字幕不卡| 在线精品视频一区| 欧美日韩亚洲三区| 国产精品久久久一区二区| 超碰99在线| 久久久777| 成人日韩在线观看| 亚洲一区二区免费在线观看| 亚洲人成亚洲精品| 福利一区视频| 少妇久久久久| 涩涩涩久久久成人精品| 青草综合视频| 欧美日韩一区二区三区不卡视频| 国产不卡精品在线| 蜜桃精品在线| 日韩欧美激情电影| 涩涩涩久久久成人精品| 精品国产中文字幕第一页| 中文在线а√天堂| 亚洲女同一区| 国产福利一区二区三区在线播放| 国产激情在线播放| 亚洲精品九九| 国产精品探花在线观看| 成人羞羞视频播放网站| 国产色综合网| 欧美日韩夜夜| 亚洲国产一区二区三区在线播放| 亚洲精品韩国| 波多野结衣久久精品| 最新亚洲一区| 国产探花一区| 亚洲成av人片一区二区密柚 | 中文亚洲免费| 欧美一区91| 色欧美自拍视频| 日韩一区精品字幕| 欧美精品91| 亚洲综合三区| 国产精品99精品一区二区三区∴| 国产一区二区精品福利地址| 欧美精品一二| 欧美三级第一页|