У меня есть три функции:
let timeVar;
let savedFunctionCode;
function startTimer(code) {
savedFunctionCode = code;
timeVar = setTimeout(savedFunctionCode, 2000);
}
function resumeTimer(intervalTime = 2000) {
setTimeout(savedFunctionCode, intervalTime);
}
function stopTimer() {
clearTimeout(timeVar);
}
Единственная цель этого — в основном способ приостановить и возобновить определенный код.
Теперь после создания экземпляра таймера (вызовом startTimer) есть возможность приостановить или возобновить выполнение кода.
Предполагаемое поведение приостановки и возобновления выполнения кода работает, ЕСЛИ методы stopTimer() и возобновитьTimer() вызываются с интервалом не менее двух секунд друг от друга.
Тем не менее, если вызовы restoreTimer() и stopTimer() в таком порядке вызываются менее чем через две секунды друг от друга, stopTimer() не сможет успешно остановить/приостановить ожидаемое выполнение возобновленияTimer().
Моя теория:
В состоянии паузы, когда вызывается submitTimer, код выполняется через две секунды. Однако, если вы быстро запустите stopTimer(), по сути нечего будет останавливать, потому что выполнение кода изSusumeTimer еще не началось. (менее двух секунд).
Таким образом, через две секунды метод возобновления работы с таймером () выполняет свой код, так как функция остановки (stopTimer) не влияет на него.
Вопрос: есть ли способ в JavaScript, чтобы когда я выполняю stopTimer(), он отменял все ожидающие выполнения кода. Итак, в этом случае я хотел бы, чтобы stopTimer() отменил выполнение кода возобновленияTimer(), которое произойдет через 2 секунды.
Пожалуйста, скажите, если это было неясно.
ПРИМЕР:
<html>
<body>
<div id="media-holder">
<span id="play-button" onclick="resumeTimer();"></span>
<span id="pause-button" onclick="stopTimer();"></span>
</div>
<script>
let timeVar = setTimeout(execute, 2000);
function resumeTimer(intervalTime = 2000) {
setTimeout(execute, intervalTime);
}
function stopTimer() {
clearTimeout(timeVar);
}
function foo() {
for(let i = 0; i < 100; i++) {
console.log("execute");
}
}
</script>
<html>
ЕСЛИ вы быстро нажмете кнопку воспроизведения и кнопку паузы, выполнение метода foo() все равно продолжится,