Привет всем, я пытаюсь сделать таймер обратного отсчета с множеством настроек, но моя первая проблема - как отложить его запуск.
Он начинается с 0 секунд и занимает немного времени, чтобы получить значение, которое я передал с предыдущей страницы
const CountDownScreen = ({route, navigation}) => {
const meditationTime = route.params.time;
Я использую время
const getMedTime = () => {
let res = meditationTime;
return new Promise(resolve => resolve(res));
};
, чтобы указать время, которое я получу
const [timeToGive, setTimeToGive] = useState();
useEffect(() => {
const setTimeState = async () => {
const getTime = await getMedTime();
console.log('get time', getTime);
// setGotTime(getTime);
let timeToGive = {
minutes: 0,
seconds: getTime,
};
setTimeToGive(timeToGive);
};
setTimeState();
updateTimer();
}, []);
состояние с time
const [time, setTime] = useState(
{
eventDate: moment.duration().add(timeToGive),
},
);
запускается таймер (я полагаю, после ОБЕЩАНИЯ)
const updateTimer = () => {
const x = setInterval(() => {
let { eventDate } = time;
if (eventDate <= 0) {
clearInterval(x);
sessionEnded();
} else {
eventDate = eventDate.subtract(1, 's');
const mins = eventDate.minutes();
const secs = eventDate.seconds();
setTime({
mins,
secs,
eventDate,
});
}
}, 1000);
setIntervalTime(x);
};
Я пробовал много разных решений, но ни одно не помогло. Он всегда начинается поздно. Я бы хотел избежать setTimeout
. Есть ли лучшая функция? Спасибо!