Как я могу получить clearInterval, чтобы остановить мой таймер? - PullRequest
2 голосов
/ 29 февраля 2020

У меня есть 2 таймера, которые я хочу запустить отдельно. 'timer' связан с первой функцией 'timePassed' и должен считать до тех пор, пока жизненные характеристики моего существа go не уменьшатся до 0, после чего он должен остановиться. Оно делает. Тем не менее, мой второй таймер 'timer2' связан со второй функцией 'restart'. Он не останавливается, когда статистика достигает 0, чего я хочу. Прямо как первый.

Я подозреваю, что это может быть связано с моим запуском timePassed (функция 1) в функции 2 restart. Я чувствую, что таймер работает слишком быстро с интервалом в 1 секунду, так что это еще одна подсказка. Но я не уверен, так как я новичок во всем этом. В основном, как я могу остановить 'timer2', как только статистика достигнет 0?

//first function that works fine

function timePassed(){
    message();
    screen();
    i++;
    answer();
    decrease();
    changeStar();
    changeDonut();
    changeHeart();
    if (health === 0 || happiness === 0 || hunger === 0){      
      dodo();
     clearInterval(timer);
          }
  }var timer= setInterval(timePassed, 1000);

//second function whose timer isn't working correctly

 function restart() {
   i=0;
   message();
   health = 4;
   happiness = 4;
   hunger = 4;
   screen();
   timePassed();
   if (health === 0 || happiness === 0 || hunger === 0){      
      dodo();
       clearInterval(timer2);    
      }
    } var timer2 = setInterval(timePassed, 1000);

Я попытался назначить var timer2 для timePassed () (как показано) и restart (). Если я использую restart (), мой счетчик отскакивает вверх и вниз, никогда не уменьшаясь настолько, чтобы вызвать clearInterval.

Если я удаляю оператор if из restart () и / или timer2, restart () просто сидит и не обратный отсчет.

1 Ответ

2 голосов
/ 29 февраля 2020

После некоторых размышлений вот те проблемы, с которыми вы столкнулись:

  • restart() никогда не войдет в его блок if, потому что вы переназначаете переменные, которые он проверяет заранее, поэтому второй интервал никогда не будет очищен вызывает проблемы, но наверняка он увеличивает значение i сразу после того, как вы установите его до 0 (проблема подпрыгивающего счетчика)

Итак, отвечая на ваш вопрос - остановите timer2, как только Статистика достигает 0, вы можете просто переместить clearInterval(timer2) в блок if внутри timePassed() и, например, вызвать timePassed() перед сбросом статистики и счетчика, или просто очистить оба интервала в restart() без вызова timePassed(). Однако все это означает, что вы будете очищать оба интервала, которые могут не соответствовать вашим ожиданиям.

Однако, глядя на предоставленный вами код, запуск двух абсолютно одинаковых таймеров не имеет особого смысла - вы можете просто запустить один таймер с половиной задержки и получить практически тот же результат.

...