【发布时间】:2017-06-25 03:56:46
【问题描述】:
我想每 5 秒循环一次数组(“站点”)。 5(“cycle_timeout”)秒后,我想调用另一个函数,该函数以 1 秒的间隔循环遍历 0 到 120 的值。当 looper 函数在循环之外调用时,它可以正常工作,但我希望从循环内部调用它。发生这种情况时,不会保留循环“延迟”,并且循环会非常快速地从 0 加速到 120。如何让 Looper 以 1 秒的间隔继续?感谢您的帮助。
var i = 0;
var l = 120;
looper(); // looper runs correctly when invoked from here.
function looper() {
var Delay = 1;
console.log("i is ", i);
i = i + 1;
if (i == l) {
i = 0;
}
setTimeout(looper, Delay * 1000);
}
var sites = ["a", "b"];
var lengthsites = sites.length;
var ii = 0;
cycle();
function cycle() {
console.log("ii is ", ii);
console.log("site is ", sites[ii]);
var cycle_timeout = 5;
setTimeout(cycle, cycle_timeout * 1000);
//looper(); // looper accelerates when invoked from here.
ii = ii + 1;
if (ii == lengthsites) {
ii = 0;
}
}
【问题讨论】:
-
如果你写的代码看起来像这样,你总会遇到问题——缩进让事情更容易阅读(当然,你可能是个天才,我猜你可能不需要格式正确的代码)
-
在编辑代码示例的格式时,我不禁注意到有很多分号丢失。这可能会产生各种意想不到的结果,应该先修复,测试,如果问题仍然存在,我们可以继续。请参阅this question - 尽管有人只是在我打字时覆盖了我的编辑并“修复”了它们,所以我们可能永远不知道这是否是一个问题。
-
oops - 我在格式化代码中添加了缺少的
;,因为我是个白痴:p -
请使用 setInterval() 而不是 setTimeout 以便以重复方式调用函数。然后你就不需要在它调用的函数中调用 setTimeout 了。
标签: javascript function loops for-loop settimeout