如何每秒在索引中连续输出每个数字?
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)
我有以下循环:
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)