Javascript:如何运行 function1 x 秒,然后运行 function2 y 秒,然后无限重复



我看过几个与我试图弄清楚的类似的问答,但并没有真正帮助我。

我想做的是:

function1(); //for 9 seconds
stop.function1();
function2(); //for 1 second
stop.function2();

然后无限期地重复此操作。 我已经尝试了很多不同的超时和间隔方法,但永远无法让它正常工作。 我感谢任何帮助。 谢谢!

更新:

函数 1 使用 Key1 流式传输信息。Function2 与 Function1 相同,但改用 Key2。我希望这能澄清一点。

JavaScript没有

做这样的事情的功能。(我不确定是否有任何语言有)。解决方法如下:

let start = new Date().getTime();
while(new Date().getTime() - start < 9000) function1();
start = new Date().getTime();
while(new Date().getTime() - start < 1000) function2();

这是一个坏主意,因为Javascript的"主"线程将卡在做这项工作10秒。但是,如果您希望函数在时间尚未流逝的情况下重复运行,那么您别无选择。也许你想把这些时间放在函数中,但这取决于你。

我相信最好的方法是做一个网络工作者来执行这项任务。Web 工作者不会冻结浏览器,因此这是一个更好的选择。

https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API

如果你想写更少的代码,你可以省略 getTime() 调用,因为 javascript 会在减号操作发生时将日期转换为毫秒数,但我相信显式方式更好(但我还没有测试过)。

我假设您的函数将无限期地继续运行,如下所示:

function1 () {
    while (true) { console.log("One more round"); }
}

您可能想要的是控制这些函数的运行时间,您可以通过测量两轮执行之间的函数内部时间来轻松做到这一点:

function1 () {
    var startTime = performance.now();
    while (performance.now() - startTime < 9000) { 
        console.log("One more round"); 
    }
}

这是一种合作的多任务处理形式。因为 JavaScript 本质上是单线程的,这将阻止其他一切的执行整整 9 秒。在数据处理领域,这是一段很长的时间。

我建议你重构你的程序,以依赖于事件和计时器。

为了获得更好的答案,您可以通过添加有关函数应该如何工作的信息来改进您的问题。

相关内容

  • 没有找到相关文章