【问题标题】:Javascript timeout loop does not wait [duplicate]Javascript超时循环不等待[重复]
【发布时间】:2016-09-15 02:36:42
【问题描述】:

我正在尝试在 javascript 中创建一个循环,我希望函数 timeLoop() 被调用 10 秒然后停止。我正在尝试使用 setInterval 执行此操作,但无论我设置的超时时间有多大,它似乎都不会等待我设置的超时。每次我运行它时,我都会收到: RangeError: Maximum call stack size exceeded 不知道如何创建一个在执行前等待一段时间的定时循环。

var seconds = new Date().getSeconds();

var mainFunc = function () {
        console.log("Time: " + seconds);
        timeLoop();
}


var timeLoop = function () {
        var newTime = new Date().getSeconds();
        var timer = newTime - seconds;
        console.log("New Time: " + newTime + " Elapsed time: " + timer);

        if(timer == 10) {
                clearInterval(timeLoop());
                return console.log("Times up 10 seconds!");
        }

        setInterval(mainFunc(), 10000);
}



mainFunc();

【问题讨论】:

  • 旁注:clearInterval() 需要一个区间 ID 作为其参数。 setInterval() 将其作为返回值提供给您。但是,您必须将其存储起来。 (example)
  • @zerkms,这不是一个重复的问题。它有一个看起来像另一个的问题,但原因不一样。这段代码中的问题是关于clearInterval的错误使用。
  • @DiegoZoracKy 实际上两者都是,clearInterval 的问题已经在另一条评论中得到澄清。请提供更好的答案。
  • 解决了!非常感谢!
  • @DiegoZoracKy 还看到 OP 可以根据重复 + 评论解决他们的问题 :-)

标签: javascript loops settimeout


【解决方案1】:

您必须只设置一次间隔,但在此代码中,您每次调用的时间方法都设置它。另外,如果您想检查时差,请在开始时获取当前时间,然后在计时器上获取时差。

更改它并使用 setTimeout!

var startTime= new Date();
var mainFunc = function () {
    console.log("Time: " + startTime);
    timeLoop();
}

var timeLoop = function () {
    var newTime = new Date();
    // get time difference in miliseconds
    // if you want it in seconds easily: parseInt(timer/1000)
    var timer = newTime - startTime;
    console.log("New Time: " + newTime + " Elapsed time (miliseconds): " + timer);

    if(timer == 10000) {
            return console.log("Times up 10 seconds!");
    }

    setTimeout(mainFunc, 10000);
}
mainFunc();

【讨论】:

  • 这正是我想要的,谢谢!现在唯一的事情是,当比较时间时说如果秒数为 59 和 newTime 为 00,它会遇到一个问题,即负秒数并且需要更长的时间才能达到 10。你知道他们实现这个并解决这个问题的最佳方法吗问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-16
  • 1970-01-01
  • 2012-10-14
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 2015-09-10
相关资源
最近更新 更多