Используйте setTimeout()
вместо setInterval()
здесь, вот так:
setTimeout(cycle, 8000);
С setInterval()
you 'Выстраивая в очередь все больше и больше стеков функции каждый раз, вместо того, чтобы вызывать ее один раз через 8 секунд, мы ставим в очередь еще один интервальный таймер для запуска каждые 8 секунд, поэтому вы получаете следующее:
- 8 секунд: 1 прогон
- 16 секунд: 2 прогона
- 24 секунды: 4 прогона
- 32 секунды: 8 прогонов
- ... э-э-э
При setTimeout()
вы получите только один прогон при включенном таймере, а не дополнительный прогон каждые 8 секунд.
Чтобы быть ясным, это происходит , потому что вы звоните ему каждый раз, когда он запускается, при обычном однократном использовании это не было бы проблемой, нет ничего изначально злого с setInterval()
.