Добро пожаловать в stackoverflow! Функция setTimeout
возвращает асинхронное обещание, которое разрешится в x мс. Если вы запускаете эту функцию в цикле, вы просто добавляете больше обещаний, которые нужно разрешить, но все они разрешатся близко к одному и тому же времени. Пример:
Отправить первое обещание: оно будет ждать 5 секунд
Через одну миллисекунду, отправить еще одно обещание, которое будет ждать 5 секунд
...
через 5 секунд, первое обещание разрешится правильно.
1 мс спустя, второе обещание разрешается правильно
...
Это поведение заставляет все ваши обещания разрешаться практически одновременно, всего через 5 секунд после их инициализации.
В вашем случае, поскольку вы хотите выполнять функцию с точным интервалом, вам нужен setInterval
. Функция setInterval
также требует времени в MS и функции, но она повторяет эту функцию каждые x мс или до тех пор, пока интервал не будет программно остановлен. Пример:
var counting = 0;
var myInterval = setInterval(function() {
//we do something...
console.log('loop:' + counting ++);
if(counting === 10) {
// we do this 10 times, than we stop the interval
clearInterval(myInterval);
}
}, 1000);
Здесь я использую интервал 1 с, потому что 5 слишком длинно для демонстрации.