温馨提示:这篇文章已超过238天没有更新,请注意相关的内容是否还可用!
Autovue不支持Vue的computed异步是因为computed属性是基于依赖的,它的值是根据依赖的属性动态计算得出的。而异步操作是不确定的,无法被直接依赖。Vue的computed属性默认是同步的,不支持异步操作。
举个例子来说明,假设我们有一个计算属性`total`,它依赖于两个异步操作`fetchData1`和`fetchData2`的结果。我们希望在两个异步操作都完成后,才计算出`total`的值。但是由于computed属性默认是同步的,无法等待异步操作的结果返回,所以无法实现这样的需求。
data() {
return {
data1: null,
data2: null
}
},
computed: {
total() {
// 无法在这里等待异步操作的结果返回
return this.data1 + this.data2;
}
},
methods: {
async fetchData1() {
// 异步操作1
this.data1 = await fetch('url1');
},
async fetchData2() {
// 异步操作2
this.data2 = await fetch('url2');
}
},
created() {
this.fetchData1();
this.fetchData2();
}
上述示例中,我们希望在两个异步操作`fetchData1`和`fetchData2`都完成后,才计算出`total`的值。但是由于computed属性默认是同步的,无法等待异步操作的结果返回,所以无法正确计算`total`的值。
为了解决这个问题,Vue提供了watch属性来监听数据的变化,可以在watch中进行异步操作,并在异步操作完成后更新计算属性的值。
data() {
return {
data1: null,
data2: null,
total: null
}
},
watch: {
async data1() {
// 异步操作1完成后更新total的值
this.total = await fetch('url1');
},
async data2() {
// 异步操作2完成后更新total的值
this.total = await fetch('url2');
}
},
methods: {
async fetchData1() {
// 异步操作1
this.data1 = await fetch('url1');
},
async fetchData2() {
// 异步操作2
this.data2 = await fetch('url2');
}
},
created() {
this.fetchData1();
this.fetchData2();
}
上述示例中,我们使用watch属性来监听data1和data2的变化,当它们发生变化时,执行相应的异步操作,并在异步操作完成后更新total的值。这样就可以实现在异步操作完成后计算computed属性的需求。
总结来说,Autovue不支持Vue的computed异步是因为computed属性默认是同步的,无法等待异步操作的结果返回。但可以通过使用watch属性来监听数据的变化,并在异步操作完成后更新计算属性的值。这样就可以实现异步计算属性的需求。