處理方法記錄第一次的請求時間-后面的請求時間,判斷間隔時間提示請求重復
// 登錄方法 定義repeatSubmit屬性控制是否重復請求
export function login(username, password, code, uuid) {const data = {username,password,code,uuid}return request({url: '/login',headers: {isToken: false,repeatSubmit: false},method: 'post',data: data})
}
request.js
// 是否需要防止數據重復提交const isRepeatSubmit = (config.headers || {}).repeatSubmit === falseif (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) {const requestObj = {url: config.url,data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data,time: new Date().getTime()}const requestSize = Object.keys(JSON.stringify(requestObj)).length; // 請求數據大小const limitSize = 5 * 1024 * 1024; // 限制存放數據5Mif (requestSize >= limitSize) {console.warn(`[${config.url}]: ` + '請求數據大小超出允許的5M限制,無法進行防重復提交驗證。')return config;}const sessionObj = cache.session.getJSON('sessionObj')if (sessionObj === undefined || sessionObj === null || sessionObj === '') {cache.session.setJSON('sessionObj', requestObj)} else {const s_url = sessionObj.url; // 請求地址const s_data = sessionObj.data; // 請求數據const s_time = sessionObj.time; // 請求時間const interval = 1000; // 間隔時間(ms),小于此時間視為重復提交console.log(requestObj.time - s_time < interval,"requestObj.time - s_time < interval");if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {const message = '數據正在處理,請勿重復提交';console.warn(`[${s_url}]: ` + message)console.log('數據正在處理,請勿重復提交')return Promise.reject(new Error(message))} else {cache.session.setJSON('sessionObj', requestObj)}}}