Для цикла с setInterval

1

Я написал цикл 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)

Однако, я получаю только полный результат в целом?

Любые предложения, что я делаю неправильно здесь?

Цените свои ответы!

  • 2
    Какую проблему вы действительно пытаетесь решить? setInterval() является блокирующим, поэтому ваш цикл for сразу запускается до завершения, а между тем вы начали limit таймеры, которые будут повторяться вечно. Я не понимаю, как это может принести пользу, и вы не описали, что вы на самом деле пытаетесь сделать.
Показать ещё 5 комментариев
Теги:

3 ответа

2
Лучший ответ

Не используйте 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 с рекурсивной функцией

0

Вы можете использовать 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)
-1

Переменная я привязана к значению вне вашей анонимной функции. Используйте код ниже, который передает значение я для функции

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)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню