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