我在此上浪费了很多时间,但无法找到解决该问题的答案。
代码如下:
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) [..]
。
但是,如果您注意到我在temp
中将相同的变量,即payload
作为值传递给了我的dispatch()
。现在,当我在控制台上记录组件的道具时,它会正确显示Array(7) [ (14)[..], ... ]
作为zoneSchedule
属性的值。
所以,我想知道为什么我无法在给定的代码中访问/迭代数组,或者为什么即使控制台中包含元素并且设置了length属性,控制台中也没有显示元素的数量。为什么在我的temp
代码中将action creator
分配给任何其他变量时,为什么相同的传递数组出现在其他对象属性的属性上,但是相同的东西却不起作用。
我想在传递之前转置温度。
感谢您的帮助。
答案 0 :(得分:1)
在进行分发之前,先将await
放在axios.all(...).then(...)
之前等待所有的诺言:
await axios.all(promises).then(function(results) {
results.forEach(function(response) {
temp.push(response.data);
});
return;
});