【发布时间】:2020-06-26 17:26:29
【问题描述】:
我正在尝试在 react Js 项目中可视化折线图(使用 canvas js),因此我使用 axios get 请求获取数据,并循环该请求以填充用作输入的数据变量折线图,但我的问题是 axios 似乎随机填充我的数据
这是我在componentdidmount() 中的代码:
constructor(props) {
super(props);
this.state = {
data: [] ,
};
}
componentDidMount(){
let responses = []
for (let i = 0; i < 8; i++) {
responses.push(axios.get("http://localhost:5000/transfer/getUsesByDay/"+i).then(res =>{
return res.data
}))
}
Promise.all(responses).then(results => {
console.log(results)
this.setState(prevState => {
return {
data: [...prevState.data, ...results.map(r => r)]
};
})
}
)
这是渲染函数:
render() {
const { data: chartData } = this.state;
const { classes } = this.props;
{console.log(chartData)}
return (
<Paper>
<Chart
data={chartData}
className={classes.chart}
>
现在,当我执行时,我得到了这个结果(console.log(results)):
0: {year: "15", utilisation: 3}
1: {year: "12", utilisation: 0}
2: {year: "12", utilisation: 0}
3: {year: "09", utilisation: 1}
4: {year: "08", utilisation: 1}
5: {year: "10", utilisation: 5}
6: {year: "09", utilisation: 1}
7: {year: "10", utilisation: 0}
然后当我重新执行时,我会得到另一个这样的结果:
0: {year: "11", utilisation: 3}
1: {year: "10", utilisation: 0}
2: {year: "10", utilisation: 0}
3: {year: "09", utilisation: 1}
4: {year: "09", utilisation: 1}
5: {year: "09", utilisation: 5}
6: {year: "08", utilisation: 1}
7: {year: "08", utilisation: 0}
结果应该是这样排序的:
0: {year: "14", utilisation: 3} // the result of http://localhost:5000/transfer/getUsesByDay/"+i when i == 0 , and so on
1: {year: "13", utilisation: 0}
2: {year: "12", utilisation: 0}
3: {year: "11", utilisation: 1}
4: {year: "10", utilisation: 1}
5: {year: "09", utilisation: 5}
6: {year: "08", utilisation: 1}
7: {year: "07", utilisation: 0}
【问题讨论】:
-
这不是
axios或react问题。负责 API 的开发人员应确保内容的顺序,或者您可以在处理结果时自行排序。 -
谢谢 samura,但那是怎么回事,我不认为问题出在 api 上,因为 api 只返回一个对象。
-
你能检查一下你的网络标签吗?提出了哪些请求
-
都是按顺序执行的
-
我通过在 axios 获取请求之前添加 async 和 await 逻辑解决了这个问题