vue在一个组件内多次异步请求,结果相互覆盖?

发布于 2022-09-07 15:32:14 字数 1418 浏览 20 评论 0

在vue的项目中,我在一个组件的created()内使用axios异步请求了两个接口,结果很奇怪的但是,返回的两个结果存在相互覆盖的情况,只有很少几次能正确接收到正确的返回结果。

在网上查了一下,看到说可以使用axios的all()方法,或者是用Promise。但..... 结果还是出现了相互覆盖的情况。

代码入下:

created () {
    this.initData();
},
methods: {
    initData () {
        this.$http.all([
        this.$http.get('/api/test1'),
        this.$http.get('/api/test2', {
          params: { id: 123 }
        })
      ]).then(this.$http.spread((res1, res2) => {
        console.log(res1)
        console.log(res2)
      }));
    }
  }

还有用Promise的方法也试过了:

methods: {
    initData () {
      Promise.all([
        this.$http.get('/api/test1'),
        this.$http.get('/api/test2', {
          params: { id: 123 }
        })
      ]).then(([res1, res2]) => {
          console.log(res1)
          console.log(res2)
      });
    }
}

返回结果:两个接口返回的数据应该是,一个长度为2的数组,一个长度为1的数组

结果收到的是这样的

clipboard.png

clipboard.png

这是相关版本

clipboard.png

main.js里axios的调用
clipboard.png

不知道怎么解决,还是我哪个地方写的有问题,求助各位大佬。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

恋竹姑娘 2022-09-14 15:32:14

你这个写的没感觉啥问题,是接口数据的问题吧

北座城市 2022-09-14 15:32:14

两个结果异步,冲突了。

function getUserAccount() {
  return axios.get('/user/12345');
}

function getUserPermissions() {
  return axios.get('/user/12345/permissions');
}
axios.all([getUserAccount(), getUserPermissions()])
  .then(axios.spread(function (acct, perms) {
    // Both requests are now complete
  }));

注意后面的axios.spread

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文