开发者问题收集

Vue 组件中异步等待的问题

2022-07-07
2373

我遇到了一个奇怪的情况,我不明白为什么在不同的位置函数工作方式不一样。 我想通过 axios 检索数据。当我在 mounted 钩子中输入我的 axios 调度时 - 它工作正常,我可以将数据从 axios 写入 draftData。 但是,如果我将调度包装在函数中并定位在方法中 - 数据不会写入 draftData。 为什么会这样?我写了我需要的内容(async/await)。

Example.vue

<script>
import LineChart from "../LineChart";
export default {
  components: { LineChart },
   data: () => ({
    loaded: false,
    chartData: null,
    labels:[],
    datasets:[],
    draftData:null,
  }),
  methods: {
    loadIncomings(){
      this.loaded = false
      try {
        let clubId = '5c3c5e12ba86198828baa4a7'
        let dateFrom = '2021-06-01T00:00:00'
        let dateTo = '2022-07-02T23:59:59'
        let groupBy = 'month'
        this.$store.dispatch('loadIncomings', {clubId, dateFrom, dateTo, groupBy})
        console.log('loadIncomings---', this.$store.state.incomings)
        this.draftData = this.$store.state.incomings
        console.log('draftData---', this.draftData)
        this.loaded = true
      } catch (e) {
        console.error(e)
      }
    },
    calcIncomings() {
      if (this.loaded){
        for (let el of this.draftData ) {
          console.log(el)
        }
      }
    }
  },
  async mounted () {
    await this.loadIncomings(),
    await this.calcIncomings()

  },
}
</script>

它看起来像这样:

在此处输入图片描述

“---UpdateIncomingsInfo---” - 它是来自突变(vuex)的 console.log。这是在 axios 之后的工作。

1个回答

您的 loadIncomings 函数不是 async ,因此它不会返回 Promise,也不会等待您的 dispatch 结束。

尝试这样做:

async loadIncomings(){
  this.loaded = false
  let clubId = '5c3c5e12ba86198828baa4a7'
  let dateFrom = '2021-06-01T00:00:00'
  let dateTo = '2022-07-02T23:59:59'
  let groupBy = 'month'
  try {
    await this.$store.dispatch('loadIncomings', {clubId, dateFrom, dateTo, groupBy})
    this.draftData = this.$store.state.incomings
  } catch (e) {
    console.error(e)
  } finally {
    this.loaded = true
  }
},

您甚至可以直接从您的操作返回数据(除了从突变中设置存储):

this.draftData = await this.$store.dispatch('loadIncomings', {clubId, dateFrom, dateTo, groupBy})
Kapcash
2022-07-07