vue项目中不同条件请求同一接口,数据错乱

75 阅读1分钟

问题描述

接手一个老项目,测试提出来的问题,说搜索条件变化时,数据显示的有问题!,我看代码逻辑没有问题,接口数据都正常返回了

image.png

原因分析

我看请求貌似最下面的响应时间比上面的快,最终找到根源问题:3个请求依次(POST1、POST2、POST3)发送,但是3个请求的响应时间不同,按照响应时间排序(POST3、POST2、POST1),然后页面请求回来的数据最终被最后一个给覆盖了,感觉是因为项目里axios没有中断请求的操作导致的

解决问题

第一种是axios里弄强制中断请求CancelToken,感觉太麻烦!

第二种是加个时间戳

组件中代码 `

data(){
  return {
   timestamp: 0,//时间戳初始值
  }
},
methods:{
  getParamsPost(url, data).then((res) => {
    //当请求时的时间戳大于上一次的时候就赋值
    if (res.timestamp > this.timestamp) {
    //每次请求完把时间戳赋值
      this.timestamp = res.timestamp; 
      this.tableData = res.data.list;
      this.listQuery.pageNum = res.data.pageNum;
      this.listQuery.pageSize = res.data.pageSize;
      this.total = res.data.total;
      this.listLoading = false;
    }
  }).catch(() => {
    this.listLoading = false;
  });
}

` axios中的代码如下:

image.png

大佬们还有没有其他简单的方式没