Я пытаюсь создать таймер обратного отсчета с одной тикающей секундой каждую секунду. Интервал работает только один раз и не выполняется. Проблема в том, что у меня нет this.state.time до тех пор, пока не будет сделан серверный вызов , тогда я могу запустить таймер. Следовательно, функция setInterval должна быть скрыта в обещании, где она выполняет только одно. Однако переменная timetill может быть константой, после извлечения она не изменяется.
componentDidMount = async () => {
const that = this;
*do stuff*
this.someFunction().finally(() => {
/*This right here, below is not working */
setInterval(that.createTimer(), 1000);
});
}
Моя JSX - это такая
{this.state.setTimer}
функция, о которой идет речь, время нужно разделить на 1000, поскольку javascript использует милисекунды
createTimer = async timerNow => {
var timerNow = (await new Date().getTime()) / 1000;
// Find the distance between now and the count down date
var distance = this.state.timeTill - timerNow;
// Time calculations for days, hours, minutes and seconds
var days = Math.floor(distance / (1000 * 60 * 60 * 24));
var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
var seconds = Math.floor((distance % (1000 * 60)) / 1000);
//the variable displayed
var setTimer = days + "d " + hours + "h " + minutes + "m " + seconds + "s ";
this.setState({setTimer});
};