gpt4 book ai didi

javascript - NodeJS setInterval() 是否排队?

转载 作者:行者123 更新时间:2023-12-05 03:30:48 28 4
gpt4 key购买 nike

浏览器中的 setInterval() 存在一个经典问题 - 如果某些 JS 代码或其他浏览器进程需要很长时间才能完成,则多个回调调用可能会“备份”并且您突然以回调快速连续执行多次。

通常这不是使用 setInterval() 时所需要的。当您希望至少有一些时间间隔在调用之间传递时,这是一个典型的用例。解决方法是改用 setTimeout(),并且仅在上一次调用完成时安排下一次调用。

这很好用,但也是额外的代码,可能会让不了解该问题的人感到困惑。

我知道 NodeJS 的工作方式与浏览器不同,但我找不到关于这个特定方面的任何信息。 NodeJS 是否也表现出相同的行为,或者它是否保证在使用 setInterval() 时调用之间的最短时间?

最佳答案

看起来像。

start = () => {
console.log(Date.now(), 'interval started');
setInterval(() => console.log(Date.now(), '-'), 1000);
}
busy = (n) => {
console.log(Date.now(), 'busy started');
for (let i = 1; i < n; i++) Math.sqrt(i, 7);
console.log(Date.now(), 'busy done');
}

start();
busy(1e10); // this takes a while; nothing is printed, because this keeps the node.js thread busy

输出:

1642469880773 interval started
1642469880776 busy started
1642469888272 busy done
1642469888272 -
1642469889273 -
1642469890274 -

请注意忙碌的开始和完成之间的漫长间隔,以及似乎没有间隔回调的积压。

关于javascript - NodeJS setInterval() 是否排队?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70749273/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com