【发布时间】:2019-05-17 16:03:08
【问题描述】:
我在 React 中有这段代码,它调用 Dark Sky API 并返回特定日期的天气数据。每个请求都有一个特定的日期。请求成功后,我通过 setState 将数据放入数组中。代码运行良好,但每个请求都是异步运行的,因此数据会按照每个调用完成的顺序推送到数组中,因此它不会让我得到一个有序的日期列表。代码如下:
loadPreviousMonth = async () => {
const current = {...this.state};
for (let i=30; i >= 1; i--) {
const date = new Date();
const previousDay = Math.floor(date.setDate(date.getDate() - i) / 1000);
const url = `/api/darksky?latitude=${current.latitude}&longitude=${current.longitude},${previousDay}`;
await darkSky(url, this.onTimeRequestSuccess, this.onError);
}
}
谢谢!
【问题讨论】:
-
您不应该将状态中的数据保存为无序,并在从状态检索后但在显示给用户之前对其进行排序。订购 30 个项目的数组只需几毫秒。但是只有在接收到当前的 api 后才进行下一次 api 调用将需要永远进行 30 次 api 调用。
-
我可以这样做,但我希望我可以按顺序运行每个 API 调用,这样我就不必采取额外的步骤。
-
你应该采取额外的步骤,编辑我之前的评论添加“为什么”。
-
谢谢,我只是在 :) 之后对数组进行了排序
标签: javascript reactjs async-await