axios无法拦截请求

项目的需要是下拉到一定程度时,根据已加载的最后一条新闻的order拼接新的url地址来获取数据,
如果下拉多次会发生请求多次数据的问题(使用了节流,但作用即小),在网上查了一些axios拦截器的配置并实际应用,但发现无法拦截?

拦截器的配置:

let pending = []; //声明一个数组用于存储每个请求的取消函数和axios标识
            let cancelToken = axios.CancelToken;
            let removePending = (config) => {
                for(let i in pending){
                    if(pending[i].url === config.url) { //当当前请求在数组中存在时执行函数体
                        pending[i].f('cancel'); //执行取消操作
                        pending.splice(i, 1); 
                        console.log('cancel');
                    }
                }
            }
            axios.interceptors.request.use(config => {
                removePending(config); //在一个axios发送前执行一下判定操作,在removePending中执行取消操作
                config.cancelToken = new cancelToken(function executor(c){//本次axios请求的配置添加cancelToken
                pending.push({ url: config.url,f:c}); //将本次的url添加到pending中,因此对于某个url第一次发起的请求不会被取消,因为还没有配置取消函数
            });
                return Promise.resolve(config);
            }, error => {
                return Promise.reject(error)
            })
            axios.interceptors.response.use(data => { 
                removePending(data.config); //在一个axios响应后再执行一下取消操作,把已经完成的请求从pending中移除
                return Promise.resolve(data)
                
                }, error => {
                //加载失败
                return {'data':{}}
                })

axios的配置

if(scrollTop + clientH + 3800 > scrollH){
                console.log('updateNow');
                console.log(this.detail[19]);
                     axios({
                         
                        url:`/${this.$route.params.routerName}?lastCursor=${this.detail[this.detail.length-1].order}&pageSize=20`
                            }).then(newRes=>{
                                console.log(newRes);
                                // console.log(pending);
                            }).catch(function(err){
                                console.error(err);
                        });
            }

控制台:

clipboard.png

想请问大佬们应该如何修改配置(;′⌒`)

阅读 3.1k
1 个回答

可以把获取的数据写到一个本地缓存里啊,同时给这个缓存加个时间标签。 下拉刷新的时候,看看是否有缓存,缓存的时间是否超过多久,如果时间间隔太小则直接读取缓存,超过某个时间长度的话,从服务器读取数据同时再次赋值给缓存。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题