vue中使用cancelToken,解决多次调用相同接口,只用保留最后一次的结果

文章讨论了在用户频繁点击筛选项时,由于接口响应时间不稳定导致页面错乱的问题。作者通过在axios的请求拦截器中添加逻辑,实现了防抖功能,确保页面展示的是最新数据,即使在网络状况变化时也能避免多次不必要的请求。
摘要由CSDN通过智能技术生成

背景:

      很多筛选维度和条件,用户每点一个筛选项,发起检索,页面展示数据

操作:

     筛选面板的条件很多,用户可以频繁点击不同的筛选项,对用户不做任何防抖和节流的限制

问题:

     接口的响应时间不是固定的,比如我第一次点击,网络不好,接口5秒才返回数据,而我的第二次点击,网络很好,只需要2秒返回数据,那么实际上页面展示的数据可能是第一次调用返回的,就导致页面错乱

解决:

调用接口的时候,增加参数:

 在拦截器中写好逻辑

// 添加请求拦截器,在发送请求之前做些什么(**具体查看axios文档**)--------------------------------------------
axios.interceptors.request.use(function (config) {
    if(config.data){
      if(config.data && config.data.specialFlag == '1') {
        config.cancelToken = new axios.CancelToken(cancel => {
//在vuex中存储一个全局的数组,在调用的接口中增加specialFlag参数用于判断需要cancel的接口,我这里多加了一个路由名称,参数可自己定义
          store.state.axiosRequest.push({cancel,routeName:config.data.routeName})
//正式发起请求之后,删除接口无关的参数,不然接口可能会报错
          delete config.data.specialFlag
          delete config.data.routeName
        })
      }
    }
    return Promise.resolve(config)
    }, function (error) {
    // 请求错误时弹框提示,或做些其他事
    return Promise.reject(error)
})

以上两部分完成之后,用户可正常调用接口,在要重新调用接口的时候取消上一次调用

 频繁调用之后,控制台显示:

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Vue是一种基于JavaScript前端开发框架,它支持组件化开发和数据驱动视图的方式。当一个接口出现多次调用时,可以通过以下几种方式来处理: 1. 将接口调用抽象为一个独立的函数或方法,然后在需要调用接口的地方直接调用该函数或方法。这样可以避免多次重复的接口调用代码,提高代码的复用性和可维护性。 2. 使用Vue的计算属性来处理接口调用。计算属性会根据依赖的数据动态计算得出一个新值,并在数据更新时自动重新计算。可以将接口调用作为依赖的数据,在计算属性处理接口调用并返回结果。这样可以确保接口调用执行一次,并且在数据更新时自动重新调用接口。 3. 使用Vue的生命周期钩子函数来处理接口调用。将接口调用放在适当的生命周期钩子函数,例如created钩子函数,在组件创建之后立即调用接口。这样可以确保接口调用执行一次,并且确保在组件创建之后立即获取到接口数据。 4. 使用Vuevuex状态管理来处理接口调用。将接口调用接口返回的数据存储在vuex的状态管理,然后在需要使用接口数据的地方直接从vuex获取。这样可以确保接口调用执行一次,并且在整个应用共享接口数据。 总之,对于一个接口出现多次调用的情况,我们可以通过抽象函数、计算属性、生命周期钩子函数或vuex状态管理等方法来处理,以提高代码的复用性和性能。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值