无限循环与更改超时

我有一个包含时间窗口的数组。 对于一个简单的情况,我正在做这10秒的窗口如下,(在乞讨当前时间将在窗口1内)

var now = new Date(); windowList = [ { id: 1, start: new Date().setSeconds(now.getSeconds() - 5), end: new Date().setSeconds(now.getSeconds() + 5), waitTime: 2000}, { id: 2, start: new Date().setSeconds(now.getSeconds() + 10), end: new Date().setSeconds(now.getSeconds() + 20), waitTime: 500}] 

然后我设置了两个函数来检查当前时间是否在一个窗口和某个窗口中。

 function isInWindow(window){ var now = new Date(); return (window.start < now && now < window.end); } 

 function isInSomeWindow(windows){ for (var i = 0; i < windows.length; i++) { if(isInWindow(windows[i])){ return windows[i]; break; } else { return false; } } } 

现在,我想通过windowList,因为我循环了一段waitTime。 每当我不在一个窗口我循环500毫秒的时间。

 function daynmicRepeat() { var localPeriod = 1000; setTimeout(function () { window = isInSomeWindow(windowList); if (window){ console.log('in window ' + window.id + ' @ ' + new Date()) localPeriod = window.waitTime; } else { console.log('not in a window @ ' + new Date()); localPeriod = 500; } daynmicRepeat(); },localPeriod); } 

当我运行它

 daynmicRepeat() 

我从第一个窗口开始,然后走出来,但似乎没有进入第二个窗口。 我究竟做错了什么?

再看看isInSomeWindow函数中的循环 – 它永远不会超过第一次运行:

 if(isInWindow(windows[i])){ return windows[i]; break; } else { return false; } 

如果isInWindow(windows[0])返回false,则您按下else语句,并返回该函数。

假设你希望函数在没有find匹配窗口的情况下返回false,如果循环完成而不返回:

 function isInSomeWindow(windows){ for (var i = 0; i < windows.length; i++) { if(isInWindow(windows[i])){ return windows[i]; break; } } return false; } 

isInSomeWindow打破循环。 尝试这个:

 function isInSomeWindow(windows){ for (var i = 0; i < windows.length; i++) { if(isInWindow(windows[i])){ return windows[i]; } }