如何在NodeJS

时间:2017-08-06 11:45:35

标签: node.js loops while-loop settimeout

我在JS上看到了关于无限循环的一堆答案,我认为这对我的代码有帮助,但它似乎没有正常工作。 我有:

var i = 0

while (true) {
  setTimeout(() => {
    i ++
    console.log('Infinite Loop Test n:', i);
  }, 2000)
}

目标是在无限循环中每2秒获取一次日志,但我似乎无法得到任何回报......我在哪里弄错了?

提前感谢您的帮助!

4 个答案:

答案 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();
  }
});