Почему clearInterval не работает в моем скрипте? - PullRequest
0 голосов
/ 14 апреля 2019

У меня проблема с моим методом clearInterval.Я подробно изучаю JS в FrontendMasters, и есть упражнение, в котором вам нужно использовать setInterval и регистрировать строку каждую секунду, а затем запускать clearInterval через 5 секунд.У меня есть доступ к правильному решению, но я хотел бы знать, почему мое решение не работает, чтобы лучше понять.console.log('clear called', func); запускается через 5 секунд и регистрирует строку clear called и тело функции.Я пытался использовать setTimeout, чтобы обернуть wrapper.stop(), но это также не сработало.Я использовал замыкания, чтобы попытаться выполнить упражнение.Вот мой сценарий.

function sayHowdy() {
 console.log('Howdy');
}


function everyXsecsForYsecs(func, interval, totalTime) {
 function clear() {
   console.log('clear called', func);
   clearInterval(func);
 }
 return {
   start() {
     setInterval(func, interval);
   },
   stop() {
     setTimeout(clear, totalTime);
   }
 }
}


const wrapper = everyXsecsForYsecs(sayHowdy, 1000, 5000);
wrapper.start();
wrapper.stop();

Спасибо

1 Ответ

2 голосов
/ 14 апреля 2019

clearInterval принимает не функцию, а идентификатор таймера , который возвращается при использовании setInterval (так что вы можете установить несколько таймеров для одной и той же функции и отменить их по отдельности).Чтобы использовать это, объявите локальную переменную внутри everyXsecsForYsecs

  var timer;

Затем назначьте ей таймер:

 timer = setInterval(func, interval);

Затем вы можете clearInterval(timer).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...