无限循环和不断变化的超时
infinite loop with changing timeouts
我有一个包含时间窗口的数组。对于一个简单的例子,我将这些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。当我不在窗口时,我循环周期为500ms。
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
语句,并从函数中返回。
假设你想让函数在没有找到匹配的窗口时返回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];
}
}
相关文章:
- 单击页面上的链接后高度发生变化
- React redux初始化功能,无论状态变化如何
- 使用优化器在慢速连接上加载main.js时需要js超时
- 角度ng变化或ng点击选择can'不起作用
- 每个选择器的Jquery css颜色都在变化,但字体大小却没有变化
- JS幻灯片与CSS背景颜色变化
- 当浏览器控制台未打开时,为什么要求会导致Internet Explorer 9超时
- 超时功能的性能
- 重新加载页面时Javascript变量发生变化
- 如何获得Bootstrap Datepicker的年和月,因为它在变化
- 使用不同的超时对数组中的每个项目进行角度动画处理
- 设置第一次执行的超时
- 如何用jquery替换字符串中可能变化的字符
- 检测数据的变化
- node.js测试事件是否是在不使用超时的情况下使用sinon.js发出的
- 如何检测和打印变化变量LESS
- 当文本不断变化时,如何避免在按钮内移动文本
- 使用javascript和随机暂停/超时快速循环文本
- 当数据库中的某些内容发生变化时调用HTTP方法Meteor.js
- 无限循环和不断变化的超时