- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) > web開(kāi)發(fā) > JavaScript >
- axios取消請求與避免重復請求
某個(gè)頁(yè)面需要下載全部數據的功能,下載數據量大,接口延遲長(cháng).....
某個(gè)頁(yè)面加載初始數據量延長(cháng)長(cháng),但單個(gè)檢索快速,出現初始數據加載中時(shí),檢索接口返回,初始數據后續返回覆蓋了檢索數據的展示....
這些情況需要我們:
系統基于老哥花褲衩開(kāi)源的vue-element-admin做的二次開(kāi)發(fā),其中的請求采用的是axios,其中封裝的request.js關(guān)鍵代碼如下所示:
// create an axios instance const service = axios.create({ baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url withCredentials: true, // send cookies when cross-domain requests timeout: 500000, // request timeout transformRequest: [function(data) { // 對 data 進(jìn)行任意轉換處理 return Qs.stringify({ ...data }, // 數組的轉換 { arrayFormat: 'brackets' }) }] }) // request interceptor service.interceptors.request.use( config => { // do something before request is sent if (store.getters.token) { // let each request carry token // ['X-Token'] is a custom headers key // please modify it according to the actual situation config.headers['token'] = getToken() } return config }, error => { // do something with request error console.log(error) // for debug return Promise.reject(error) } )
發(fā)起請求的方法:
export function remoteApi(data) { return request({ url: '/api', method: 'post', data }) }
其官方文檔::
const CancelToken = axios.CancelToken; const source = CancelToken.source(); axios.get('/user/12345', { cancelToken: source.token }).catch(function(thrown) { if (axios.isCancel(thrown)) { console.log('Request canceled', thrown.message); } else { // 處理錯誤 } }); axios.post('/user/12345', { name: 'new name' }, { cancelToken: source.token }) // 取消請求(message 參數是可選的) source.cancel('Operation canceled by the user.');
export function remoteApi(data, cancelToken) { return request({ url: '/api', method: 'post', cancelToken, data }) }
實(shí)際請求時(shí),創(chuàng )建cacelToken:
// 組件方法內 this.cancelToken = CancelToken.source() remoreApi(data, this.cancelToken).then(....).catch(....).finally(....)
需要取消請求時(shí),執行:
// 組件方法內 this.cancelToken.cancel('取消下載')
避免一個(gè)接口的重復請求,以免延時(shí)長(cháng)的接口返回數據覆蓋另一個(gè)接口的返回數據,造成數據顯示錯誤。思路也相對簡(jiǎn)單,使用一個(gè)全局Map存儲請求標識與對應的cancelToken。請求,在發(fā)起請求前,按照請求標識,喚起對應cancelToken的cancel方法,然后再發(fā)出新請求,即可滿(mǎn)足條件。
到此這篇關(guān)于axios取消請求與避免重復請求的文章就介紹到這了,更多相關(guān)axios取消請求內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站