如何每秒在索引中连续输出每个数字?

How to output each number consecutively in an index every second?

我有以下循环:

for (let index = 0; index < 4; index++) {  
  setInterval(function() {
    console.log(index)
  }, 1000);
}

我怎样才能让它控制台在第一秒记录 0,第二秒记录 1,第三秒记录 2,第四秒记录 3,第五秒记录 0,等等,直到间隔被清除?

var counter = 0,
  limit = 5,
  handle; // global vars

function start() {
  counter = 0;
  clearInterval(handle); // reset
  handle = setInterval(count, 1000); // interval handle
}

function count() {
  console.log(counter++); // increment counter
  if (counter >= limit) { // check limit
    clearInterval(handle); //  stop timer
  }
}

function stop() {
  clearInterval(handle);
}

start();

setTimeout(function(){
start();
},3110); // reset while counting.

如评论中所述添加了重置功能。

这是使用生成器函数的或多或少但更优雅的解决方案。

生成器函数在这里很有用,因为它们的执行可以通过 yield 暂停,并通过调用生成器对象的 next 方法恢复:

function* logger() {
  while (true) {
    for (let index = 0; index < 4; index++) {
      console.log(index)
      yield
    }
  }
}

let generator = logger()
setInterval(() => generator.next(), 1000)

或者,再次使用生成器,您甚至可以 yield 当前 index,并让间隔函数记录(或做任何其他事情)它:

function* logger() {
  while (true) {
    for (let index = 0; index < 4; index++) {
      yield index
    }
  }
}

let generator = logger()
setInterval(() => console.log(generator.next().value), 1000)