我有一个包含时间窗口的数组。对于一个简单的例子,我按照以下方式制作了这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()
我从第一个窗口开始,然后最终退出,但似乎从未进入第二个窗口。我做错了什么?
答案 0 :(得分:1)
isInSomeWindow
打破了循环。试试这个:
function isInSomeWindow(windows){
for (var i = 0; i < windows.length; i++) {
if(isInWindow(windows[i])){
return windows[i];
}
}
答案 1 :(得分:1)
再看一下isInSomeWindow
函数中的循环 - 它永远不会超过第一次运行:
if(isInWindow(windows[i])){
return windows[i];
break;
} else {
return false;
}
如果isInWindow(windows[0])
返回false,则点击else
语句,然后返回该函数。
如果没有找到匹配的窗口,假设您希望函数返回false,那么如果循环完成而没有返回,则需要返回:
function isInSomeWindow(windows){
for (var i = 0; i < windows.length; i++) {
if(isInWindow(windows[i])){
return windows[i];
break;
}
}
return false;
}