christmaz 2023-01-30 17:13 采纳率: 20%
浏览 13

使用axios.all运行多个请求时,spread中多个返回参数有概率接收到完全相同的数据。这是什么情况?

我刚使用vue做一个网站,其中有“热点文章”和“推荐文章”列表,于是我把它们写成一个组件,其中有两个同时运行的axios请求,分别获得热点列表和推荐列表数据。但我发现这两个数据总是混淆或相互覆盖。于是用了axios.all方法。


methods: {
    // 热点
    getHotlist: function(columnId, number) {
      return this.$axios({
        method: 'post',
        url: 'http://localhost:8090/articles/hotlist',
        data: {
          columnId: columnId,
          number: number
        },
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded;'
        }
      })
    },
    // 推荐
    getRecommendlist: function(number) {
      return this.$axios({
        method: 'post',
        url: 'http://localhost:8090/articles/recommendlist',
        data: {
          number: number
        },
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded;'
        }
      })
    },
    getData: function() {
      let that = this
      this.$axios.all([that.getHotlist(that.columnId, 4), that.getRecommendlist(4)])
        .then(
          that.$axios.spread(function(hotdata, recdata) {
            console.log('所有请求完成')
            console.log('请求1结果', hotdata)
            console.log('请求2结果', recdata)
            } else {
              that.$message.error(recdata.data.status.msg)
            }
          }))
    }
  },mounted: function() {
    this.getData()
  }

我按网上的写法写的。但是有一定概率spread中的参数hotdata和recdata是一样的。应该是覆盖了,混乱了。hotdata取成返回的recdata的数据了,亦或相反。
我试着把两个请求分开写入两个独立的组件,但只要在同一页面出现,同时运行,就有概率会乱。组件间的axios请求也会乱。
以前用jquery时也有多个ajax同时请求的情况,但也没乱过呀。
以前就没听说过不同的请求间回调获得的数据还会乱……这种情况常见不?如何解决呢?

  • 写回答

4条回答 默认 最新

  • 流比 2023-01-30 17:16
    关注

    问题是axios.all可能返回的两个数据是同一个,不是因为axios.all本身问题,而是因为请求是异步的,而两个请求可能同时完成导致回调中的两个数据是同一个。解决方法是将请求设置为同步请求,或者通过使用setTimeout等方法控制请求的完成顺序。

    评论

报告相同问题?

问题事件

  • 修改了问题 1月30日
  • 修改了问题 1月30日
  • 创建了问题 1月30日

悬赏问题

  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥30 BC260Y用MQTT向阿里云发布主题消息一直错误
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)