let pendingList = []
let CancelToken = null
let count = 0
// 初始化
function init(axios){
CancelToken = axios.CancelToken
}
// run
function run(config){
// token 用于赋值在config的cancelToken对象上
// cancel 用于取消请求
const { token, cancel } = CancelToken.source()
// 用于记录请求的url
const key = config.url
// 赋值取消请求
config.cancelToken = token
// 如果请求列表中有处于请求中的cancelToken
if (pendingList.length) {
// 筛选出之前请求列表中相同的url进行cancel
const cancelList = pendingList.filter(v=>v.key===key)
cancelList.forEach((item,index)=>{
item.cancel('取消'+item.key)
count++
})
// 把执行了cancel的数据清理出请求列表
pendingList = pendingList.filter(v=>v.key!==key)
}
// 把新的请求放进请求列表中
pendingList.push({key,cancel})
}
// clear
function clear(res){
// 请求回来后把处于等待列表的数据清空
pendingList = pendingList.filter(v=>v.key!==res.config.url)
console.log('PendingList---------------->',PendingList);
}
function clearCount(){
count = 0
}
function getCount(){
return count
}
export default{
init,run,clear,clearCount,getCount
}
使用:在axios.js中引入该文件3个方法,在axios头部引入并执行
init
函数,在请求拦截执行run
函数,在响应拦截执行clear
函数