Javascript Foreach承诺所有数组问题

Javascript Foreach承诺所有数组问题,javascript,reactjs,Javascript,Reactjs,我的数组有问题吗?我试图在foreach的最后一次迭代中运行一个函数,但我不明白为什么没有为前一个对象设置我的count\u answers变量?正如您在日志中所看到的,只为最后一次迭代设置了count\u answers??arr[index].count\u answers=count\u answers超出了上次迭代的条件,那么我在这里做错了什么 cleandata.forEach((child, index, arr) => { var getAnswers = Firebas

我的数组有问题吗?我试图在foreach的最后一次迭代中运行一个函数,但我不明白为什么没有为前一个对象设置我的
count\u answers
变量?正如您在日志中所看到的,只为最后一次迭代设置了
count\u answers
??
arr[index].count\u answers=count\u answers
超出了上次迭代的条件,那么我在这里做错了什么

cleandata.forEach((child, index, arr) => {
  var getAnswers = FirebaseRef.child(
    'counter/questions/' + child.key + '/count_answers'
  ).once('value');
  Promise.all([getAnswers]).then(answer => {
    var count_answers = answer[0].val();
    arr[index].count_answers = count_answers;
    console.log('arr', arr);
    if (!arr[index + 1]) {
      console.log('arr_last', arr);
    }
  });
});
我的日志:

arr Array [
  Object {
    "created_at": 1574585699407,
    "date_upd": 1574585722870,
    "key": "-LuRbkkQpLCyaEv9-mKK",
    "question": "7",
  },
  Object {
    "count_answers": 2,
    "created_at": 1574584389276,
    "date_upd": 1574584399534,
    "key": "-LuRXktbNins7wqWUpjv",
    "question": "5",
  },
]
array_last Array [
  Object {
    "created_at": 1574585699407,
    "date_upd": 1574585722870,
    "key": "-LuRbkkQpLCyaEv9-mKK",
    "question": "7",
  },
  Object {
    "count_answers": 2,
    "created_at": 1574584389276,
    "date_upd": 1574584399534,
    "key": "-LuRXktbNins7wqWUpjv",
    "question": "5",
  },
]
arr Array [
  Object {
    "count_answers": 2,
    "created_at": 1574585699407,
    "date_upd": 1574585722870,
    "key": "-LuRbkkQpLCyaEv9-mKK",
    "question": "7",
  },
  Object {
    "count_answers": 2,
    "created_at": 1574584389276,
    "date_upd": 1574584399534,
    "key": "-LuRXktbNins7wqWUpjv",
    "question": "5",
  },
]

如果您需要另一个ref,那么您可以嵌套Promise.all,我假设两者都基于child:

Promise.all(
  cleandata.map((child, index) =>
    Promise.all([
      FirebaseRef.child(
        'counter/questions/' + child.key + '/count_answers'
      ).once('value'),
      FirebaseRef.child(
        'counter/questions/' + child.key + '/other_ref'
      ).once('value'),
    ]).then(([answer, other]) => ({
      ...child,
      count_answers: answer.val(),
      other_ref: other.val(),
    }))
  )
).then(dataWithAnswers =>
  console.log('answers in clean data:', dataWithAnswers)
);

我试着为foreach的最后一次迭代运行一个函数
不,你每次迭代都在运行该foreach中的所有东西我说的是if(!arr[index+1]){console.log('arr_last',arr)哦,是的……但是你没有在等待上一次迭代中的前一个异步代码完成-所以,它可能没有运行yethow我该怎么做?如果我想获得更多数据,我该怎么做?就像我想获得另一个firebase引用并将结果添加到数组中一样?@manyouuwx我更新了答案,假设两个都是fir您需要的ebase数据项基于子项。