Привет я пытаюсь заставить цикл для запуска 3 раза с увеличивающимся интервалом каждый раз. Я бы хотел, чтобы цикл выводил текст на консоль каждый раз, когда он запускается, но я не могу помешать циклу запустить все сразу и показать выполненное, завершенное и выполненное, а затем дважды завершенное. Код:

function tellMeWhenDone () {

  for(var i=0; i<3; i++) {
          if (i === 0)
                  var text = console.log('done');

          else if (i === 1)
                  var text = console.log('and done');

          else (i === 2)
                  var text = console.log('finished');

          time(i);
}
}

     function time (i){
             setInterval(function(text){
        return text;
      }, 1000*(i+1))
}
tellMeWhenDone();

Любая помощь будет принята с благодарностью! Спасибо.

0
mat 6 Янв 2017 в 08:07

4 ответа

Лучший ответ

setInterval устанавливает повторяющееся событие. setTimeout срабатывает только один раз.

Для создания трех тайм-аутов, 1, 2 и 3 секунд - вы можете использовать:

setTimeout(function(){console.log('done')},1000);
setTimeout(function(){console.log('and done')},2000);
setTimeout(function(){console.log('finished')},3000);

Обратите внимание, что нет петли. Каждый setTimeout выполняется, и по истечении времени ожидания выполняется оператор console.log.

Ваш цикл for выполняется полностью перед вызовом setInterval.

1
user2182349 6 Янв 2017 в 05:14

Вы можете попробовать с обратным вызовом:

function log(msg) {
  document.getElementById('logger').innerHTML += '<br/>' + msg;
}

function on_complete() {
  log('all done, when = ' + Date.now());
}

for (var i = 1, max = 5; max >= i; i++) {
  (function(x) {
    setTimeout(function() {
      log('loop, x = ' + x + ', when = ' + Date.now());
      if (max === x)
        on_complete();
    }, 1000 * x); //increasing timeout
  })(i);
}
<pre id='logger'>Running code...</pre>
0
user2575725user2575725 6 Янв 2017 в 05:28

Удалить условие в цикле else

function tellMeWhenDone() {

  for (var i = 0; i < 3; i++) {
    if (i === 0)
      var text = console.log('done');

    else if (i === 1)
      var text = console.log('and done');

    else
      var text = console.log('finished');

    time(i);
  }
}

function time(i) {
  setInterval(function(text) {
    return text;
  }, 1000 * (i + 1))
}
tellMeWhenDone();
1
vijay 6 Янв 2017 в 05:21

Попробуйте с этим .. Я надеюсь, что это решило вашу проблему

 function tellMeWhenDone () {

 for(var i=0; i<3; i++) {
      if (i === 0)
              var text = console.log('done');

      else if (i === 1)
              var text = console.log('and done');

      else if (i === 2)
              var text = console.log('finished');

      time(i);
}
}

 function time (i){
         setInterval(function(text){
    return text;
  }, 1000*(i+1))
}
 tellMeWhenDone();
0
Darshak 6 Янв 2017 в 05:17