У меня есть функция стрелки, которая вызывается из cDM
для получения обновленного статуса расписаний каждые 20 секунд с setTimeout()
.
componentDidMount() {
//get request to /schedules
//update state with response data
this.getUpdatedStatus();
}
Каждое расписание, представленное на /schedules
, выглядит следующим образом:
"data": {
"id": "2147483605",
"selfUri": "/schedules/2147483605",
"type": "Schedule",
"status": "Pending",
}
Итак, в приведенном ниже методе запрашивается каждый schedule.selfUri
, и я пытаюсь обновить status
каждого расписания.
getUpdatedStatus = () => {
//fetch updated status,
const schedules = this.state.schedules;
Promise.all(
schedules.map(schedule =>
axios({
method: "get",
url: schedule.selfUri,
})
)
)
.then(response => {
console.log(response);
const isIncomplete = response.some(r => r.status !== "Complete");
console.log(isIncomplete);
if (isIncomplete) {
this.timeout = setTimeout(() => this.getUpdatedStatus(), 20000);
}
this.setState(
{
scheduleStatus: isIncomplete ? "Pending" : "Complete",
},
() => {
console.log(this.state.scheduleStatus);
console.log(this.state.schedules);
}
);
})
.catch(error => console.log(error.response));
};
Функция setTimeout
работает и запрашивает каждые 20 секунд, чтобы получить возможное обновление статуса.Ответ объекта в конечном итоге возвращает статус complete
, но значение не отображается повторно в моей таблице.Я считаю, что есть проблема с моей цепочкой обещаний, и использование setTimeout
не обновляет мой this.state.scheduleStatus
, когда он завершается.Я приложил кодовую коробку, которая дает лучшее представление о моей проблеме.
Кодовая коробка