Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在承诺解析后,为依赖于承诺的项目更新v-list。_Javascript_Vue.js - Fatal编程技术网

Javascript 在承诺解析后,为依赖于承诺的项目更新v-list。

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

我有一个遍历对象数组的列表,并生成依赖于当前对象的列表项

必须使用对象作为参数进行计算,该参数返回一个承诺。问题在于,在呈现列表时,它只能访问promise对象(该对象处于挂起状态),并且在解析后不会更新

<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中创建一个最小的示例,我会更了解这种情况。是的,它可以工作!非常感谢!我应该在最初的问题中给出一个更大的背景,对此表示抱歉。