控制台输出未显示数组元素的数量。数组元素无法在代码中访问

时间:2018-08-13 07:59:26

标签: javascript arrays reactjs promise axios

我在此上浪费了很多时间,但无法找到解决该问题的答案。

代码如下:

export const fetchZoneSlots = (name, startDate) => async dispatch => {

  var zoneSchedule=[], promises=[], temp=[],i,j;
  try {

    for(i=0;i<7;i++){

      const response = await axios.post(
        'http://localhost:3090/zoneslots',
        {name, date: startDate}
      );

      promises.push(response);

      startDate= moment(startDate,'YYYY-MM-DD').add(1,'day').format('YYYY-MM-DD');
    }

    axios.all(promises).then(function(results) {
      results.forEach(function(response) {
          temp.push(response.data);
      });
    });
    console.log(temp);

    dispatch({ type: ZONE_CHANGE, payload: temp });
  } catch (e) {
    dispatch({ type: ZONE_ERROR, payload: 'Zone information cannot be fetch' });
  }
};

在上面的代码中,我以对象数组的形式获取了数据,并将该数组推入temp变量中以创建矩阵(2D数组)。现在我想转置这个矩阵。但是,控制台上没有temp[i]temp[i][j]的输出。

换句话说,我无法访问数组的各个元素。但是,有temp的输出,我在代码中有console.log,如下图所示。 enter image description here

您可以在图像中看到,控制台上未显示元素数量,它仅显示Array []而不是Array(7) [..]

但是,如果您注意到我在temp中将相同的变量,即payload作为值传递给了我的dispatch()。现在,当我在控制台上记录组件的道具时,它会正确显示Array(7) [ (14)[..], ... ]作为zoneSchedule属性的值。

所以,我想知道为什么我无法在给定的代码中访问/迭代数组,或者为什么即使控制台中包含元素并且设置了length属性,控制台中也没有显示元素的数量。为什么在我的temp代码中将action creator分配给任何其他变量时,为什么相同的传递数组出现在其他对象属性的属性上,但是相同的东西却不起作用。

我想在传递之前转置温度。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

在进行分发之前,先将await放在axios.all(...).then(...)之前等待所有的诺言:

await axios.all(promises).then(function(results) {
  results.forEach(function(response) {
      temp.push(response.data);
  });
  return;
});