request.js
import axios from 'axios'
const service = axios.create({
baseURL: 'baseURL'
})
const pendingRequests = new Map()
service.interceptors.request.use(
config => {
const requestKey = `${config.url}/${JSON.stringify(config.params)}/${JSON.stringify(config.data)}&request_type=${
config.method
}`
if (pendingRequests.has(requestKey)) {
config.cancelToken = new axios.CancelToken(cancel => {
cancel(`重复的请求被主动拦截: ${config.url}`)
})
} else {
pendingRequests.set(requestKey, config)
config.requestKey = requestKey
}
return config
},
error => {
pendingRequests.clear()
console.log(error)
return Promise.reject(error)
}
)
service.interceptors.response.use(
response => {
const { config } = response
const requestKey = config.requestKey
pendingRequests.delete(requestKey)
},
error => {
pendingRequests.clear()
return Promise.reject(error)
}
)
service.clearRequestList = () => {
pendingRequests.clear()
}
export default service
路由切换时清除当前页面缓存的接口
router.beforeEach(async(to, from, next) => {
request.clearRequestList()
})