【问题标题】:how can I handle async functions with axios vuejs如何使用 axios vuejs 处理异步函数
【发布时间】:2020-05-02 21:46:20
【问题描述】:

为了重构代码,我将其拆分为三个文件

当我有方法 getUsers 时的Users.vue

getUsers() {
      this.isLoading = true
      this.$store
        .dispatch('auth/getValidToken')
        .then((data) => {
          this.$store
            .dispatch('user/fetchUsers', data.jwt)
            .then((response) => {
              console.log('DATA RESPONSE 2', response)
              this.items = response
              this.isLoading = false
            })
            .catch((error) => {
              console.log(error)
            })
        })
        .catch((error) => {
          this.$router.push('/pages/login')
          console.log(error)
        })
    },

当我有动作时的user.js

fetchUsers(context, jwt) {
    return UserService.getUsers(jwt)
  },

当我有一个调用 api 的函数时,还有 UserServices.js

async getUsers(jwt) {
    apiUsers.defaults.headers.common['jwt'] = jwt
    await apiUsers.get('/users').then((response) => {
      console.log('DATA RESPONSE 1', response.data)
      let data = response
      return data
    })
  },

如您所见,我将控制台日志消息用于跟踪 api 响应

DATA RESPONSE 1 向我展示了我期望的带有用户数据的对象,但是... DATA RESPONSE 2 显示一条消息“未定义”

我是 vuejs 的初学者,如果有任何帮助,我将不胜感激

【问题讨论】:

    标签: javascript vue.js vuejs2 axios


    【解决方案1】:

    你需要从getUsers()返回Promise。

    类似:

    async getUsers(jwt) {
        apiUsers.defaults.headers.common['jwt'] = jwt
        return await apiUsers.get('/users').then((response) => {
          console.log('DATA RESPONSE 1', response.data)
          let data = response
          return data
        })
    },
    

    请注意:你没有很好地使用asyncawait,例如,不需要等待上面getUsers()中的响应你可以简单地返回,而你可以在你的@下使用async/await Users.vue 的 987654326@。

    【讨论】:

    • 谢谢,我已经按照您的建议尝试过:效果很好,我会尝试简单地返回
    猜你喜欢
    • 2018-08-05
    • 2020-07-08
    • 1970-01-01
    • 2017-11-07
    • 1970-01-01
    • 2018-05-12
    • 2019-08-20
    • 2018-12-12
    • 2019-04-17
    相关资源
    最近更新 更多