【问题标题】:Calling a function by an interval in a function called by interval JS间隔JS调用函数中按间隔调用函数
【发布时间】:2016-09-07 09:38:39
【问题描述】:

我想调用一个函数,该函数可以使用已经按间隔工作(运行函数)的函数内的间隔不断检查时间量。 那就是我所做的:

 var interval;
 var time = prompt("Insert amount of time in seconds");
 function log ()
 {
 console.log ("log() called.");
 }
 function onrunning ()
 {
  interval = setInterval(log,time*1000);
}
gameloop = setInterval(onrunning,5);//This interval must not cleared

第一次工作正常,但之后它会越来越快地调用 log() 函数,直到浏览器崩溃。 我试着这样做

var interval;
var time = prompt("Insert amount of time in seconds");
function log ()
{
console.log ("log() called.");
}
function onrunning ()
 {
  interval = setInterval(log,time*1000);
 }
 gameloop = setInterval(onrunning,5);
 clearInterval(interval); //tried this but no differece.

【问题讨论】:

  • setInterval - 多次调用回调,setTimeout 调用一次回调 - 不确定是否有帮助
  • 你在哪里打电话给clearInterval(interval)?你能把它包含在你的完整代码中吗?
  • 我猜你只想执行log 给定的次数(在提示中给出),然后停止记录,对吗?还是只在提示的时间过去后一次?
  • 每次给定时间保持记录,它不应该停止,但它会在时间上进行第一次登录,但在此之后,日志功能会越来越快地被调用,直到浏览器崩溃。 @Teemu
  • 看起来case "a" 会经常通过onrunning。当它每 5 毫秒运行一次时,您将很快获得大量新的日志间隔。此外,我认为 Jaromanda X 在他们的评论中(至少部分)解决了您的问题。

标签: javascript switch-statement settimeout setinterval clearinterval


【解决方案1】:

你在错误的地方清除间隔。

在您的代码中,您试图在创建它之前清除它(因此它基本上是无操作的)。

您希望在创建执行后清除它:

function log ()
{
    console.log ("log() called.");
    clearInterval(interval);
}

您还应该注意到,由于您的 onrunning 也作为“间隔”回调被触发,因此您正在每个回调执行帧上创建新的日志间隔。如果您也想清除此间隔,只需复制与上述相同的逻辑,但在 onrunning 回调中。


我假设您只想在设定的时间段后触发一次“log”回调(也可能是“onrunning”回调)。在这种情况下,您应该使用setTimeout 而不是setInterval

Jaromanda X in this comment 已经指出了这一点。

【讨论】:

  • 您好,感谢您的回复。我做过类似的事情,但它仍然越来越快地调用 log() 函数。我想要的只是不断地调用 log() 函数。 `var timeout1; var time = prompt("以秒为单位插入时间"); function log () { console.log ("log() 调用。");清除超时(超时1); } 函数 onrunning () { timeout1 = setTimeout(log,time*1000); } gameloop = setInterval(onrunning,5);`
  • 在这种情况下,您应该清除onrunning 间隔,而不是log 间隔。正如我已经说过的,只需复制与清除 log 间隔相同的逻辑即可。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-09
  • 2013-10-28
  • 1970-01-01
相关资源
最近更新 更多