为什么在循环中声明变量后输出错误? -(错误问题:如何在递归方法中使用Promises声明变量?)

时间:2018-10-20 15:59:58

标签: javascript recursion promise

此问题基于以下问题: How do i add a summed list in a recursive method?

这次,我想计算.Gallery { display: flex; flex-wrap: wrap; margin: -1em 0 1em -0.5em; } .img { padding: 1em 0 0 0.5em; flex: 1 0; min-width:100%; height:100%; } 的平均值。因此,我创建了一个resultObject,其中包含所有resultlist个数字,并且一旦element.val循环结束,就迭代了forEach并计算了平均值。

该平均对象就是新的tempuserlist。本示例仅显示我的数据集的一个小示例。对于较大的数据集,存在异步性问题。我已经尝试过Promises,但真的不知道如何使用它们。有人有主意吗?

result

1 个答案:

答案 0 :(得分:1)

好的,

虽然我在准备一个小示例,但我注意到我的愚蠢错误……平均值不应在循环中计算……否则平均值将一遍又一遍地计算……对不起,看来我的问题没有得到解决。毕竟与承诺和异步编程无关。至少结果现在还可以,而且我还没有任何异步行为;)

无论如何,我感谢您愿意帮助我。但是,您的建议帮助我从不同的角度看待事情,而不是卡在这些诺言上。

function somefunc(obj) {
   let temp = {};  
      let tempuserlist = [];
      for (var key in obj) {
         if (obj.hasOwnProperty(key)) {
            if(!obj[key].hasOwnProperty("userlist")) {
               somefunc(obj[key]);
            }
            obj[key].userlist.forEach(function(element) {
               if (!temp.hasOwnProperty(element.name)){
                 tempuserlist.push(temp[element.user] = { user: element.user});
                 temp[element.user].resultlist = [];
                 temp[element.user].val= 0;
               } temp[element.name].resultlist.push(element.val);
            });
         }
      }
      for (const user in tempuserlist) {
        tempuserlist[user].val= Math.round(tempuserlist[user].val/ tempuserlist[user].resultlist.length);
      }
      obj.userlist = tempuserlist;
   }