对于具有增加的setTimeout间隔的循环

时间:2017-01-06 05:07:38

标签: javascript

您好我试图让for循环每次以增加的间隔运行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();

任何帮助将不胜感激!谢谢。

4 个答案:

答案 0 :(得分:1)

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 :(得分:1)

删除else循环中的条件

&#13;
&#13;
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();
&#13;
&#13;
&#13;

答案 2 :(得分:0)

试试这个..我希望它能解决你的问题

 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();

答案 3 :(得分:0)

您可以尝试使用回调:

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>