Я написал цикл for
используя setInterval
. Цель состояла в том, чтобы "капать подачу" выход цикла for пользователю. Поэтому в основном я хотел бы отправить сообщение console.log
каждые 10000ms
и вывести его на консоль пользователя.
См. Мой пример ниже:
function longForLoop(limit) {
for (var i = 0; i < limit; i++) {
setInterval(() => {
console.log("This is a long for loop. We are at " + i)
}, 10000)
}
}
longForLoop(10)
Однако, я получаю только полный результат в целом?
Любые предложения, что я делаю неправильно здесь?
Цените свои ответы!
Не используйте setInterval
с циклом for в этих случаях, поскольку setInterval
будет работать без каких-либо условий. используйте либо один из них. Я использовал setInterval
без цикла, и я использую clearInterval
после достижения условия
function longForLoop(limit) {
var i = 0;
var ref = setInterval(() => {
console.log("This is a long for loop. We are at " + ++i);
if (i == limit) clearInterval(ref);
}, 1000);
}
longForLoop(10);
Другими способами вы также можете использовать setTimeout
с рекурсивной функцией
Вы можете использовать setTimeout вместо setInterval. Посмотрите на мой пример:
function longForLoop(limit) {
for (var i = 0; i < limit; i++) {
(function(j) {
setTimeout(function() {
console.log('j',j);
}, 100 + (1000 * j));
})(i);
}
}
longForLoop(10)
Переменная я привязана к значению вне вашей анонимной функции. Используйте код ниже, который передает значение я для функции
function longForLoop(limit) {
for (var i = 0; i < limit; i++) {
function innerFunction(valOfi)
{
console.log("This is a long for loop. We are at " + valOfi);
}
setInterval(innerFunction(i) , 10000)
}
}
longForLoop(10)
setInterval()
является блокирующим, поэтому ваш циклfor
сразу запускается до завершения, а между тем вы началиlimit
таймеры, которые будут повторяться вечно. Я не понимаю, как это может принести пользу, и вы не описали, что вы на самом деле пытаетесь сделать.