setTimeout и while
Здрвствуйте, имеется вот такой код.
let a = 0;
function message(val, callback) {
setTimeout(() => {
console.log(val);
}, 1000);
callback();
}
while (a < 5) {
message(a, () => {
a++;
});
}
Хотел реализовать так, чтобы каждую секунду выводилось сообщение в консоли, которое передаётся в функцию, а увеличение счётчика происходит в обратном вызове функции. Однако фунция setTimeout асихнронна, поэтому не ожиадает своего выполнения. Поэтому возникает вопрос, как реализовать вывод счётчика в консоль с интервалом в 1 секунду? Для этого необходимо, чтобы увеличивался тайм-аут для каждого следюущего шага? Если так, то есть ли ещё какие-либо способы выполнения подобной задачи. И почему при увеличении счётчика тайм-аута внутри его функции, происходит зацикливание. Например, для такой программы:
let b = 0;
while (b < 5) {
setTimeout(() => {
console.log(b);
b++;
}, 1000);
}
Ответы (1 шт):
Есть замечательная функция setInterval();
var repeat = 5; //количество повторений
var b = 0; // ?ваше значение?
var intervalId = null; // переменная для хранения идентификатора таймера
intervalId = setInterval(()=>{
console.log(b++);
if(repeat <= 0){ // количество повторений закончилось
clearInterval(intervalId); // прекращаем данный цикл (таймер)
}
--repeat; // каждый вызов мы уменьшаем количество повторений
}, 1000);