【问题标题】:How long can NodeJS `setTimeout` wait?NodeJS `setTimeout` 能等多久?
【发布时间】:2019-04-16 05:42:36
【问题描述】:

NodeJS setTimeout 可以将函数的执行延迟一周吗? (假设服务器没有宕机......) 在其他一些服务器中,如 ASP.NET CORE,服务器在不使用时会休眠,因此我们不能使用它。

在 NodeJS 世界中是否也会发生同样的情况,或者服务器会永远保持开启状态?

【问题讨论】:

  • 它不会进入睡眠状态,但是有更好的方法来代替 setTimeout
  • 这在技术上是可行的,但肯定有更好的方法来做到这一点,例如定时任务
  • 如果您想在特定日期完成某些事情,您可以使用 cron 库。如果没有其他限制,则必须通过 JavaScript 支持的最大整数来定义最大 setTimeout 时间。
  • @desoares JS 支持的最大整数超过 285,000 年...(以毫秒计)

标签: javascript node.js server settimeout


【解决方案1】:

回答你的问题

setTimeout 的第二个参数 delay 为 32 位有符号整数。所以该值不能大于 2147483647(约 24.8 天)。当延迟大于 2147483647 时,天将设置为 1。(ref)

回答您的用例

您可以运行cron 作业,而不是使用setTimeout 进行这么长时间的延迟。

【讨论】:

    【解决方案2】:

    文档中没有任何内容表明它不起作用。但是,如果以毫秒为单位的长度大于2147483647(24 天 20 小时 31 分 24 秒),则延迟设置为1.

    https://nodejs.org/api/timers.html#timers_settimeout_callback_delay_args

    在浏览器上的行为是不同的。不出所料,如果关联的选项卡处于非活动状态,超时会延迟。

    如果方法上下文是一个Window对象,等到Document 与方法上下文相关联已完全激活 timeout 毫秒(不一定是连续的)。

    否则,如果方法上下文是 WorkerUtils 对象,则等到 超时毫秒已经过去,工人没有暂停(不是 必须连续)。

    https://www.w3.org/TR/2011/WD-html5-20110525/timers.html#dom-windowtimers-settimeout

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多