javascript - Vue 在 promise.then() 中返回 Observer
问题描述
我想在created()
收到数据时触发 vuex 操作,然后触发从服务器获取更多数据的新异步方法。当数据可用时,我将在组件中使用它们。不幸的是,我被困在Observer
从Promise
. 我试图在没有运气的情况下将数据更改为 computed()。我尝试过,await
但它也没有帮助。另一个计算属性item
工作正常。我知道这Observer
是 Vue 的反应方式,但我不知道如何解决它。
<SeriesBarChart v-if="! inProgress" :series="series" /> // initial attempt
<SeriesBarChart v-if="! inProgress" :series="groups" /> // computed property attempt
data: () => ({
series: [{}, {}],
inProgress: true,
}),
created() {
this.$store.dispatch('GET_POLL', { slug: this.slug }).then(() => {
this.runQueries(this.item._id, ['vehicles=car&vehicles=bike', 'region=PRG']); // await here did not help
});
},
computed: {
item() {
return this.$store.getters.POLL;
},
groups() {
return this.series;
},
},
methods: {
async runQueries(id, queries) {
this.inProgress = true;
const promises = [];
for (let i = 0; i < queries.length; i += 1) {
promises.push(this.$store.dispatch('GET_POLL_VOTES', { id, query: queries[i] }));
}
Promise.all(promises).then((values) => {
for (let i = 0; i < values.length; i += 1) {
this.series[i] = values[i].data.data;
}
});
this.inProgress = false;
}
解决方案
因为 Yom 没有发布答案,他甚至删除了他有用的评论,所以我会为未来的谷歌人发布我的答案。Vue 提供对象的原因是块外的Observer
语句。以下代码按预期工作:this.inProgress = false;
then
async runQueries(id, queries) {
this.inProgress = true;
const promises = [];
for (let i = 0; i < queries.length; i += 1) {
promises.push(this.$store.dispatch('GET_POLL_VOTES', { id, query: queries[i] }));
}
Promise.all(promises).then((values) => {
for (let i = 0; i < values.length; i += 1) {
this.series[i] = values[i].data.data;
}
this.inProgress = false;
});
}
推荐阅读
- algorithm - 绘制二项式堆
- cocoapods - 'FBSDKLoginManager' 没有可见的@Interface 声明选择器'loginWithReadPermissions:fromViewController:handler:'
- solr - Solr 通配符和转义字符一起
- methods - sequelize 实例和类方法的替代方案
- c# - 我们如何在服务器上捕获 C# 中的错误
- c - 如何在 C 中使用另一个数组来查找数组数据
- javascript - 打印带有附加内容的传单地图
- javascript - findOne 返回 null 但它不应该返回 (mongoDB)
- java - 类层次结构爆炸式增长
- php - JQuery 日历默认星期从星期一开始