vue 中 axios要如何做同步机制

axios 好像不能想jquery那样,设置async来实现同步请求,这导致我实现一些逻辑带来的困难。

methods: {
    funcA() {
        axios.post(
            // 在请求成功后,把属性a赋值
        )
        return a
    }
}

如果我有类似上面的需求,我要在请求完成后,对数据进行赋值,然后在后面的语句中要操作数据,比如返回它。如果是同步机制,那么最后我可以成功返回a的值,但是axios是异步的。
把需求写在请求的回调里面是不行的,如果我要返回这个值,只是这个请求调用返回,对于整个函数来说没有返回,这真的很难受,有没有什么解决方案?回调真的不行。

阅读 49k
6 个回答
methods: {
    async funA(){
        var res =  await axios.post('')//这里的res就是你axios请求回来的结果了
    }
}
 funcAsync () {
      // fetch data
      return this.$axios.post('')
    }

    funcDoSomeThing () {
      this.funcAsync().then(res => {
          // do some thing
      })
    }

将获取数据的函数return 出来不就行了

是否可以说下你的代码逻辑?还真没见过异步回调解决不了的问题,如果一定要同步的话,async+await了解下?

你需要衡量一下自己的思路有没有问题,为什么一定要返回值?
我觉得你可能需要从头学习

统一回答一下吧,我知道这样的需求有点诡异,因为以前用jQuery,是可以这样的,执行请求,同步卡住,请求完成赋值一些数据,然后在下面的代码中去操作这些数据。

但是axios不行了,我查了一些资料也有很多人说就算是jquery也还是不要用同步的。

其实我的需求非要写在回调里面也不是不行,只是想看看能不能像原来这样去操作(也是不想在回调里面写太多逻辑,要抽离就要封装)。

测试了用async语法是可行的。我相信肯定有人以前用jQuery肯定有这样做过,熬到vue了换个思路吧。

另外,应该只有JavaScript大量用回调吧,回调地狱听说过吗?同步就是为了解耦(原谅我学艺不精吧,我也不是专门搞前端的)

新手上路,请多包涵

怎么没太理解呢,我现在的需求是这样的,接口里面服务器做了token验证,再我调用api以前,需要先请求token,缓存请求结果,然后再在后续api的请求中设置请求头为token请求中的结果,如若不然,便得不到api的访问权限。请问这种情况我应该怎么处理?

推荐问题
宣传栏