【发布时间】:2017-10-28 20:06:55
【问题描述】:
我尝试将来自 http 请求的数据呈现给工作正常的组件,问题是在获取数据时它为空。当数据为 null 时,控制台会抛出 TypeError,直到所有数据都加载并提交到 Vuex 存储。
一切都按照我的猜测进行,我只是想弄清楚如何防止错误被抛出并等到所有适当的数据都被获取。我见过其他人使用 v-if 来检查数据是否为空,这将起作用。这似乎很乏味,而且有更好的方法来实现相同的结果,而不需要一个充满 v-if 语句检查每个状态的应用程序。
我遇到了这个解决方案,但它仍然没有按照我的预期工作,我仍然收到相同的控制台错误。我是否正确使用了这些关键词,它们的位置是否正确?因为我尝试过的每一个变化都没有改变。
Vuex 动作:
const actions = {
getThread ({ commit }, payload) {
Vue.http
.get(`http://localhost:9000/threads/${payload.id}`)
.then(async response => {
commit(FETCH_THREAD, await response.data)
})
}
}
这是在我的 vue 文件中调用该操作:
created () {
this.$store.dispatch('getThread', {id: '59280ab5acbafb17af9da902'})
}
【问题讨论】:
-
@VAMSIKRISHNA 我也调查过这个,但它在控制台中产生了同样的错误。
-
为什么是
async-await?当get在.then中解析时,您已经收到了数据。此外,突变只能是同步的,所以如果我没有遗漏什么,这个 async-await 提交是没有意义的。 -
@wostex 这就是我感到困惑的地方,我只是跟着这篇帖子*.com/questions/41609155/… 出现了同样的问题。
-
异步等待用于操作,而不是突变。那里的情况不同。为了避免在未获取数据时出现渲染错误,只需在模板中使用防护:例如
v-if="mydata && mydata.length"用于数组。
标签: asynchronous async-await vue.js vuex