【问题标题】:Console output does not show number of elements of array. Array Elements not accessible in code控制台输出不显示数组元素的数量。代码中无法访问的数组元素
【发布时间】:2019-01-19 21:49:21
【问题描述】:

我在这方面浪费了几个小时,但无法找到这个问题的答案。

代码如下:

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,如下图所示。

正如您在图像中看到的,控制台上没有显示元素的数量,它只显示Array [] 而不是Array(7) [..]

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

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

我想在通过之前调换温度。

提前感谢您的帮助。

【问题讨论】:

  • 您在“then”之外进行控制台输出。数据还没有。但是,当您在控制台日志中展开阵列时,数据已到达。当你输出一个指向对象的指针时,它的内容可能会改变。

标签: javascript arrays reactjs promise axios


【解决方案1】:

await 放在axios.all(...).then(...) 之前等待所有的承诺,然后再进行调度:

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

【讨论】:

    猜你喜欢
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    • 2020-08-12
    相关资源
    最近更新 更多