我在JS上看到了关于无限循环的一堆答案,我认为这对我的代码有帮助,但它似乎没有正常工作。 我有:
var i = 0
while (true) {
setTimeout(() => {
i ++
console.log('Infinite Loop Test n:', i);
}, 2000)
}
目标是在无限循环中每2秒获取一次日志,但我似乎无法得到任何回报......我在哪里弄错了?
提前感谢您的帮助!
答案 0 :(得分:12)
为什么你想要一个while循环?使用setInterval
或(更好)创建一个在超时后再次调用自身的函数:
function logEvery2Seconds(i) {
setTimeout(() => {
console.log('Infinite Loop Test n:', i);
logEvery2Seconds(++i);
}, 2000)
}
logEvery2Seconds(0);
let i = 0;
setInterval(() => {
console.log('Infinite Loop Test interval n:', i++);
}, 2000)
答案 1 :(得分:1)
您正在寻找的功能是setInterval,使用如下:
setInterval(callback, millis)
答案 2 :(得分:1)
var x = true;
while(x){
console.log("In loop")
}
答案 3 :(得分:0)
以下是 TypeScript 实现和使用的示例:
interface ILoopContext<T> {
data: T;
state: "RUNNING" | "PAUSED";
}
function loop<T>(
interval: number,
context: ILoopContext<T>,
func: (options: { data: T; start: () => void; stop: () => void }) => void
) {
const stop = () => context.state = "PAUSED";
const start = () => context.state = "RUNNING";
setTimeout(() => {
if (context.state === "RUNNING") {
func({ data: context.data, start, stop });
}
loop(interval, context, func);
}, interval);
return { start, stop };
}
loop(1000, { state: "RUNNING", data: { counter: 0 } }, (options) => {
const { stop, data } = options;
data.counter += 1;
console.log(data.counter);
if (data.counter == 10) {
stop();
}
});