Как долго может ждать NodeJS `setTimeout`? - PullRequest
0 голосов
/ 13 ноября 2018

Может ли NodeJS setTimeout задержать выполнение функции на неделю?( при условии, что сервер не выходит из строя ... ) На некоторых других серверах, таких как ASP.NET CORE, сервер будет находиться в спящем режиме, когда он не используется, поэтому мы не можем его использовать.

Происходит ли то же самое в мире NodeJS, или сервер остается навсегда?

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Отвечая на ваш вопрос

setTimeout имеет второй аргумент задержки в виде 32-разрядного целого числа со знаком. Таким образом, значение не может быть больше, чем 2147483647 (около 24,8 дней). Если задержка больше 2147483647, то день будет установлен на 1. ( ref )

Ответ на ваш вариант использования

вместо использования setTimeout для такой длительной задержки вы можете запустить cron job.

0 голосов
/ 13 ноября 2018

В документации нет ничего, что могло бы предположить, что это не будет работать. Однако, если длительность в миллисекундах превышает 2147483647 (24 дня 20 ч 31 мин 24 с), задержка устанавливается на 1.

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

Поведение в браузере отличается. Неудивительно, что тайм-аут задерживается, если связанная вкладка неактивна.

Если контекст метода является объектом Window, подождите, пока Document связанный с контекстом метода был полностью активен для дальнейшего время ожидания в миллисекундах (не обязательно последовательно).

В противном случае, если контекст метода является объектом WorkerUtils, подождите, пока истек тайм-аут миллисекунды, если рабочий не приостановлен (не обязательно последовательно).

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

...