我在JS上看到了一堆关于无限循环的答案,我想这对我的代码会有帮助,但它似乎没有正常工作。我有:
var i = 0 while (true) { setTimeout(() => { i ++ console.log('Infinite Loop Test n:', i); }, 2000) }
目标是在无限循环中每2秒获取一次日志,但我似乎无法获得任何信息...我哪里错了?提前感谢您一如既往的帮助!
dbf7pr2w1#
为什么要使用while循环呢?要么使用setInterval,要么(更好)创建一个函数,在超时后再次调用它自己:
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)
kwvwclae2#
您要查找的函数是setInterval,其用法如下:setInterval(callback, millis)
setInterval(callback, millis)
6ie5vjzr3#
下面是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(); } });
cotxawn74#
var x = true; while(x){ console.log("In loop") }
mutmk8jj5#
请使用Promise和setTimeout。
Promise
setTimeout
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); let i = 0; while(true){ await sleep(3000);//3000ms i++; console.log('Infinite Loop Test n:', i); }
5条答案
按热度按时间dbf7pr2w1#
为什么要使用while循环呢?要么使用
setInterval
,要么(更好)创建一个函数,在超时后再次调用它自己:kwvwclae2#
您要查找的函数是setInterval,其用法如下:
setInterval(callback, millis)
6ie5vjzr3#
下面是TypeScript实现和用法的示例:
cotxawn74#
mutmk8jj5#
请使用
Promise
和setTimeout
。