Javascript 在承诺解析后,为依赖于承诺的项目更新v-list。
我有一个遍历对象数组的列表,并生成依赖于当前对象的列表项 必须使用对象作为参数进行计算,该参数返回一个承诺。问题在于,在呈现列表时,它只能访问promise对象(该对象处于挂起状态),并且在解析后不会更新Javascript 在承诺解析后,为依赖于承诺的项目更新v-list。,javascript,vue.js,Javascript,Vue.js,我有一个遍历对象数组的列表,并生成依赖于当前对象的列表项 必须使用对象作为参数进行计算,该参数返回一个承诺。问题在于,在呈现列表时,它只能访问promise对象(该对象处于挂起状态),并且在解析后不会更新 <md-list id="orderList"> <md-list-item v-for="order in orders" :key="order.id" @click="orderDialog(order)"> {{ asyn
<md-list id="orderList">
<md-list-item v-for="order in orders" :key="order.id" @click="orderDialog(order)">
{{ asyncFunction(order) }}
</md-list-item>
</md-list>
{{异步函数(顺序)}
我怎样才能获得想要的行为?像这样的东西应该适合你。基本上,当承诺返回时,将异步响应存储在反应数组中。因为它是被动的,所以每次承诺返回时,承诺响应将自动显示
<template>
<md-list id="orderList">
<md-list-item v-for="(order,i) in orders" :key="order.id" @click="orderDialog(order)">
<template v-if="typeof asyncDataHolder[i] !== 'undefined'">
{{asyncDataHolder[i]}}
</template>
</md-list-item>
</md-list>
</template>
<script>
export default {
data: {
orders: [],
asyncDataHolder: []
},
created() {
// sample load orders
sampleLoadOrdersData().then(response => {
this.orders = response;
this.loadAsyncData();
});
},
methods: {
loadAsyncData() {
// async await version
this.orders.map(async (order, i) => {
const response = await asyncFunction(order);
this.$set(this.asyncDataHolder, i, response);
});
// normal promise version
this.orders.map((order, i) => {
asyncFunction(order).then(response => {
this.$set(this.asyncDataHolder, i, response);
});
});
}
}
};
</script>
{{asyncDataHolder[i]}
导出默认值{
数据:{
订单:[],
异步数据持有者:[]
},
创建(){
//样品装载订单
sampleLoadOrdersData()。然后(响应=>{
这个命令=响应;
此参数为.loadAsyncData();
});
},
方法:{
loadAsyncData(){
//异步等待版本
this.orders.map(异步(order,i)=>{
常量响应=等待异步函数(顺序);
this.$set(this.asyncDataHolder,i,response);
});
//正常承诺版本
this.orders.map((order,i)=>{
异步函数(顺序)。然后(响应=>{
this.$set(this.asyncDataHolder,i,response);
});
});
}
}
};
您能再添加一点细节吗?您是说您拥有orders数据,但该部分数据稍后加载?这是有道理的,而且它似乎对asyncDataHolder更新做出了应有的反应。但是,由于某些原因,“mounted()”中的代码无法工作。“.map”函数内的代码块未运行!知道为什么会这样吗?澄清一下:我在“const response=await..”上面放了一个console.log,它没有打印任何内容。也许你的babel transpiler不能与async await一起工作。也许我犯了一些我不知道的语法错误。无论如何,我已经用普通承诺版本更新了答案。请试试?还是不行。我检查了this.orders是否确实是一个数组,并且在运行代码时有对象。。。。我还检查了mounted()方法是否运行。我无法推断出这里出了什么问题?地图根本没有运行吗?你有什么错误吗?如果你能在js fiddleYes中创建一个最小的示例,我会更了解这种情况。是的,它可以工作!非常感谢!我应该在最初的问题中给出一个更大的背景,对此表示抱歉。