Ral*_*thy 2 javascript for-loop setinterval console.log
我有以下循环:
for (let index = 0; index < 4; index++) {
setInterval(function() {
console.log(index)
}, 1000);
}Run Code Online (Sandbox Code Playgroud)
我怎样才能让它控制台记录第一秒 0,第二秒 1,第三秒 2,第四秒 3,第五秒 0,依此类推,直到间隔被清除?
这是使用生成器函数的或多或少但更优雅的解决方案。
生成器函数在这里很有用,因为它们的执行可以通过 暂停yield,并通过调用生成器对象的next方法恢复:
function* logger() {
while (true) {
for (let index = 0; index < 4; index++) {
console.log(index)
yield
}
}
}
let generator = logger()
setInterval(() => generator.next(), 1000)Run Code Online (Sandbox Code Playgroud)
或者,再次使用生成器,您甚至可以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)Run Code Online (Sandbox Code Playgroud)