我看过几个与我试图弄清楚的类似的问答,但并没有真正帮助我。
我想做的是:
function1(); //for 9 seconds
stop.function1();
function2(); //for 1 second
stop.function2();
然后无限期地重复此操作。 我已经尝试了很多不同的超时和间隔方法,但永远无法让它正常工作。 我感谢任何帮助。 谢谢!
更新:
函数 1 使用 Key1 流式传输信息。Function2 与 Function1 相同,但改用 Key2。我希望这能澄清一点。
做这样的事情的功能。(我不确定是否有任何语言有)。解决方法如下:
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 秒。在数据处理领域,这是一段很长的时间。
我建议你重构你的程序,以依赖于事件和计时器。
为了获得更好的答案,您可以通过添加有关函数应该如何工作的信息来改进您的问题。