@nemolayn
Создатель бота Nemo

Как обойти ограничение в setTimeout JS?

Пытался создать таймер на более чем 31104000000 (больше чем 32-bit), и столкнулся с ограничением:
(node:2248) TimeoutOverflowWarning: 31104000000 does not fit into a 32-bit signed integer.
Timeout duration was set to 1.

Есть ли какие то способы обойти или же аналоги setTimeout на 64 битке?
  • Вопрос задан
  • 169 просмотров
Решения вопроса 3
rqdkmndh
@rqdkmndh
Web-разработчик
Берете текущее время - Date.now() к нему прибавляете время на которое выдаете бан (хоть минуту, хоть годы) и сохраняете это значение. Периодически (раз в сутки например) проверяете вышло время бана или нет, т.е. стало текущее время больше сохраненного - значит пора разбанивать. Еще можно сделать проверку разбана конкретного пользователя при его попытке зайти.
То что вы описываете с setTimeout дичь конечно, но при желании можно и её реализовать - сделать вложенные setTimeout.
Ответ написан
Комментировать
anatoly_kulikov
@anatoly_kulikov
Помог ответ? Отметь решением!
Для такого используют базы данных - определяют временную метку, после которой пользователь будет разбанен и при ее достижении ограничения снимаются. Вешать тайм-ауты для этого неправильно - вдруг сервер приляжет отдохнуть и всё эти данные потеряются.
Ответ написан
Комментировать
@nemolayn Автор вопроса
Создатель бота Nemo
Самое лучшее - setInterval()
Пример:
let interval = async () => {
	await setInterval(findMute, 10000)
	await setInterval(findBan, 10000)
}

Каждые 10 секунд проверка на мут и бан в функциях описан сам разбан
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы