HistoryART
@HistoryART
Надзиратель

Как обнулять интервал при каждом новом вызове?

Хотелось бы достичь последовательного вызова, то есть указываю 2 интервала с разницей в секунду и пока второй не отработает, первый будет работать, fiddle:

function getWord(word, delay, callback) {
	let interval;
	return function() {
  	if(interval) {
    	console.log('clearInterval')
    	return clearInterval(interval);
    }
    interval = setInterval(() => callback(word), delay);
  }.apply(this);
}
  • Вопрос задан
  • 108 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Если правильно понял, нужно, чтобы срабатывание любого таймера было эксклюзивным – оно отключало другие сработавшие до этого таймеры.
Каждый следующий гасит предыдущие.

let previousTimer;

const startTimer = (word, delay, callback) => {
  const timer = setInterval(
    () => {
      if (previousTimer !== timer) {
        clearInterval(previousTimer);
        previousTimer = timer;
      }
      callback();
    },
    delay
  );
};

startTimer('t1', 280, () => console.log('cb t1'));
startTimer('t2', 1200, () => console.log('cb t2'));
startTimer('t3', 910, () => console.log('cb t3'));

// t1, t1, t1, t3, t2, t2, t2...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы