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

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

JavaScript如何實現防止重復的網絡請求的示例

瀏覽:240日期:2023-10-05 08:14:09
前言

在開發中,經常會遇到接口重復請求導致的各種問題。對于重復的網絡請求,會導致頁面更新多次,發生頁面抖動的現象,影響用戶體驗。例如當前頁面請求還未響應完成,就切換到其他路由,那么這些請求直到響應返回才會中止。無論從用戶體驗或者從業務嚴謹方面來說,取消無用的請求確實是需要避免的。

實現思路

JavaScript如何實現防止重復的網絡請求的示例

** 1.在發送請求前先攔截當前請求地址 (url + 方法 + 參數);** 2.開啟一個請求隊列用于保存 當前地址;** 3.每次請求查看請求隊列里面有沒有當前url地址;** 4.如果請求隊列里有當前url地址就取消當前請求,** 5.如果沒有就發送請求,當請求數據返回后,請求隊列里清除當前url地址。

1.平時我們寫接口是這樣的:

請求接口文件

import { http } from ’@/plugin/axios’; // 導入請求接口 http// 初始化export function getInit(params) { return http({ method: ’get’, url: ’/xxx/xxx/xx’, params, });}

主要就是這里執行 http方法的時候做操作;執行http函數的時候能獲取到請求所有配置 config ,返回promise對象。

2.這里演示使用axios,思路是執行請求函數的時候外面包一層

axios.js配置文件

import axios from ’axios’;import { httpRequest, completeRequest } from ’./options’; // 這里就是我們要實現的邏輯文件// 里面做一些請求攔截,響應攔截操作 具體查看axios文檔const service = axios.create({ baseURL: ’xxx/xxx’,});// 請求攔截器service.interceptors.request.use(config => {}, error => {})// 響應攔截器service.interceptors.response.use(response => { completeRequest(response); // 2.響應請求回來執行}, error => { })export function http(config) { // => 這里config就是傳遞的請求配置參數 return httpRequest(config, service); // + 1.在這里做一些邏輯操作}3.防止重復網絡配置文件

options.js(1)發送請求前,查看請求隊列里是否有當前請求(url地址來判斷)

請求隊列有當前url地址, 取消請求 返回promise.reject失敗 沒有當前請求,正常發送請求;

/** * 職責: 防止重復的網絡請求 * */let list = new Set(); // 1.請求隊列// 合并 方法 參數 url地址function getUrl(config = {}) { // get請求 params參數 post請求 data參數, baseURL const { url, method, params, data, baseURL = ’’ } = config; const urlVal = url.replace(baseURL, ’’); return `${urlVal}?${method === ’get’ ? getformatObjVal(params) : getformatObjVal(data)}`;}// 處理 url地址 const getformatObjVal = (obj) => { obj = typeof obj === ’string’ ? JSON.parse(`${obj}`) : obj; var str = []; for (let p in obj) { if (obj.hasOwnProperty(p) && p !== ’_t’) { var item = obj[p] === null ? ’’ : obj[p]; // 處理null str.push(encodeURIComponent(p) + ’=’ + encodeURIComponent(item)); } } return str.join(’&’);}// 2.請求方法export function httpRequest(config = {}, axios) { const url = getUrl(config); //3. 這里我們獲取到了URL地址 if (list.has(url)) { // 4.查看請求隊列是否有當前url地址 return Promise.reject(’In the request’); // 5.在請求隊列里面 取消當前請求, 返回Promise失敗結果 } // 6. 請求隊列沒有當前url地址 發送請求并把url地址存入請求隊列里 list.add(url); return Promise.resolve(axios); }

(2)請求響應回來后,在請求隊列里刪除當前url地址; (下一次請求就可以正常發送)​ options.js

// 請求響應回來執行這個函數export function completeRequest(response = {}) { const { config } = response; // 1.response里面config能拿到配置參數 const url = getUrl(config); // 2.獲取url地址 if (list.has(url)) { list.delete(url); // 3.刪除請求隊列中的當前請求url地址 }}

axios.js

import axios from ’axios’;import { httpRequest, completeRequest } from ’./options’; // 防止重復請求const service = axios.create({ baseURL: ’xxx/xxx’,});// 請求攔截器service.interceptors.request.use(config => {}, error => {})// 響應攔截器service.interceptors.response.use(response => { completeRequest(response); // 2.響應請求回來執行 +}, error => { })// 導出請求export function http(config) { return httpRequest(config, service); // 1.發送請求前執行}

到這里已經實現了防止重復的網絡請求,但還有一個問題,響應請求發生異常了要清除請求隊列中當前url地址。不清理,下一次發送請求直接被取消掉 (這里我就隨便寫了一個方法,把請求隊列全部清空,大家可以按自己場景來寫)。

/** * 清空所有請求隊列 */export function clearRequestList() { list = new Set(); // 這里我就直接清空了}

完整http.js文件

import axios from ’axios’;import { httpRequest, completeRequest, clearRequestList } from ’./options’; // 防止重復請求 +const service = axios.create({ baseURL: ’xxx/xxx’,});// 請求攔截器service.interceptors.request.use(config => {}, error => {})// 響應攔截器service.interceptors.response.use(response => { completeRequest(response); // 2.響應請求回來執行}, error => { clearRequestList(); // + })// 導出請求export function http(config) { return httpRequest(config, service); // 1.發送請求前執行}

完整options.js

/** * 職責: 防止重復的網絡請求 * */let list = new Set(); // 1.請求隊列// 合并 方法 參數 url地址function getUrl(config = {}) { // get請求 params參數 post請求 data參數, baseURL const { url, method, params, baseURL = ’’ } = config; const urlVal = url.replace(baseURL, ’’); return `${urlVal}?${method === ’get’ ? getformatObjVal(params) : ’post’}`;}// 處理 url地址 const getformatObjVal = (obj) => { obj = typeof obj === ’string’ ? JSON.parse(`${obj}`) : obj; var str = []; for (let p in obj) { if (obj.hasOwnProperty(p) && p !== ’_t’) { var item = obj[p] === null ? ’’ : obj[p]; // 處理null str.push(encodeURIComponent(p) + ’=’ + encodeURIComponent(item)); } } return str.join(’&’);}// 2.請求方法export function httpRequest(config = {}, axios) { const url = getUrl(config); //3. 這里我們獲取到了URL地址 if (list.has(url)) { // 4.查看請求隊列是否有當前url地址 return Promise.reject(’In the request’); // 5.在請求隊列里面 取消當前請求, 返回Promise失敗結果 } // 6. 請求隊列沒有當前url地址 發送請求并把url地址存入請求隊列里 list.add(url); return Promise.resolve(axios);}/** * 請求響應回來執行這個函數 */export function completeRequest(response = {}) { const { config } = response; // 1.response里面config能拿到配置參數 const url = getUrl(config); // 2.獲取url地址 list.has(url) && list.delete(url); // 3.刪除請求隊列中的當前請求url地址}/** * 清空所有請求隊列 */export function clearRequestList(error) { // error 可以獲取到配置, 做一些操作。 list = new Set(); // 這里我就直接清空了}

以上就是我實現防止網絡請求的方式,之前我有使用過axios中CancelToken來進行取消請求;當會有一些問題。

需要配置請求文件,不友好,團隊開發配置也比較麻煩。 需要給每個請求都配置CancelToken。 有兩個方法使用它 具體可以參考官網文檔

到此這篇關于JavaScript如何實現防止重復的網絡請求的示例的文章就介紹到這了,更多相關JavaScript 防止重復的網絡請求內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩毛片视频| 麻豆精品久久久| 国产精品qvod| 91免费精品国偷自产在线在线| 欧美 日韩 国产精品免费观看| 天堂av在线| 亚洲黄色免费av| 国产日韩1区| 欧美日韩亚洲一区三区| 午夜天堂精品久久久久| 亚洲日本免费电影| 亚洲精品乱码久久久久久蜜桃麻豆| 国产亚洲网站| 久久成人一区| 丝袜美腿成人在线| 久久福利影视| 丝瓜av网站精品一区二区| 99在线|亚洲一区二区| 悠悠资源网久久精品| 亚洲国产不卡| 久久国产精品99国产| 久久aⅴ国产紧身牛仔裤| 婷婷国产精品| 欧美日韩国产免费观看视频| 欧美特黄视频| 丝袜a∨在线一区二区三区不卡| 日韩中文字幕高清在线观看| 黑丝一区二区| 性欧美精品高清| 美国三级日本三级久久99 | 免播放器亚洲| 亚洲激情黄色| 视频一区欧美日韩| 婷婷精品在线| 国产欧美日韩一区二区三区四区 | 欧美www视频在线观看| 亚洲va中文在线播放免费| 伊伊综合在线| 婷婷成人在线| 在线国产一区二区| 午夜久久一区| 丝袜亚洲另类欧美| 日本在线不卡视频| 国产精品白浆| 捆绑调教美女网站视频一区| 成人国产精品一区二区免费麻豆| 成人精品天堂一区二区三区| 亚洲免费成人| 国产日本亚洲| 国产精品不卡| 欧美日韩国产一区二区三区不卡| 久久亚洲国产精品一区二区| 亚洲欧美一级| 国产激情欧美| 电影天堂国产精品| 久久九九99| 热久久国产精品| 国产午夜一区| 在线一区av| 好吊日精品视频| 欧美亚洲tv| 日韩啪啪电影网| 亚洲永久字幕| 国产精品久久| 亚洲不卡av不卡一区二区| 亚洲神马久久| 国产乱人伦精品一区| 88xx成人免费观看视频库| 免费在线欧美视频| 精品国产精品久久一区免费式 | 国产精品成人一区二区网站软件| 欧美亚洲国产精品久久| 亚洲国产日韩欧美在线| 国产日产精品_国产精品毛片 | 中文无码久久精品| 欧美精品97| 九九久久电影| 国产精品亚洲产品| 亚洲午夜黄色| 日韩中文av| 成人久久久久| 欧美亚洲国产日韩| 不卡中文字幕| 国产精品白丝久久av网站| 黄色亚洲在线| 国产一区二区三区不卡av| 成人午夜国产| 在线国产日韩| 久久精品中文| 国产精品三p一区二区| 亚洲高清影视| 精品久久影院| 日本成人在线一区| 亚洲第一区色| 麻豆精品视频在线| 最新亚洲国产| 91精品国产调教在线观看| 欧美日韩中出| 午夜久久福利| 亚洲美女久久精品| 久久国产日韩欧美精品| 先锋影音久久久| 老司机精品在线| 中文字幕日韩高清在线| 成人羞羞视频在线看网址| 91精品丝袜国产高跟在线| av高清一区| 国产精品中文字幕亚洲欧美| 尹人成人综合网| 欧美日韩 国产精品| 欧美日中文字幕| 99国产精品视频免费观看一公开| 亚洲精品88| 91亚洲精品在看在线观看高清| 国产偷自视频区视频一区二区| 欧美激情另类| 麻豆精品久久久| 四虎精品一区二区免费| 欧美日韩免费观看一区=区三区 | 男女激情视频一区| 亚洲经典在线| 久久人人88| 国产成人在线中文字幕| 欧美国产免费| 国产精品欧美一区二区三区不卡| 美国三级日本三级久久99| 国产精品美女久久久| 欧美日韩国产一区二区三区不卡 | 不卡专区在线| 久久久久久久欧美精品| 性感美女一区二区在线观看| 国产欧美啪啪| 一区二区不卡| 蜜桃一区二区三区在线观看| 日韩欧美一区二区三区免费观看| 国产精品chinese| 青青国产91久久久久久| 蜜臀久久99精品久久久画质超高清| 你懂的网址国产 欧美| 奇米狠狠一区二区三区| 蜜臀av性久久久久蜜臀aⅴ流畅| 伊人久久成人| 欧美日韩国产亚洲一区| 视频一区中文| 伊人久久在线| 久久精品亚洲人成影院| 91免费精品| 成人日韩av| 国产一区二区色噜噜| 欧美aa在线视频| 久久精品国产久精国产| 国产精品va| 久久这里只有精品一区二区| 国产精品巨作av| 日韩精品免费视频人成| 天堂精品久久久久| 国产劲爆久久| 精品精品国产三级a∨在线| 国际精品欧美精品| 精品久久福利| 日韩成人综合| 日韩午夜一区| 在线看片日韩| 青草久久视频| 欧美精品91| www.51av欧美视频| 合欧美一区二区三区| 国产一级久久| 在线一区二区三区视频| 天堂av在线一区| 日本一区二区三区视频在线看| 欧美激情久久久久久久久久久| 久久精品理论片| 91日韩在线| 激情欧美日韩一区| 午夜影院欧美| 中国女人久久久| 日韩国产在线观看| 欧美激情日韩| 欧美日韩视频免费观看| 亚洲国产一区二区三区在线播放| 伊人成人网在线看| 久久国产日韩欧美精品| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 亚洲一级在线| 亚洲开心激情| 国产欧美久久一区二区三区| 国产精品一区二区三区美女| 国产中文欧美日韩在线| 成人久久一区| 鲁大师成人一区二区三区| 青青草伊人久久| 国产精品伦一区二区| 欧美国产专区| 免费精品国产| 日韩区一区二| 麻豆精品视频在线观看免费| 亚洲福利专区| 亚洲综合欧美| 国产一区福利|