@sferos

Кто поможет с таймерами в JS?

Долго сижу над такой проблемой, есть серверный код, в нем функция, которая должна запускаться когда клиент ее вызовет через сокеты.
socket.on("one", function(result){
if(result===...){
foo();
}
});
function foo(){
//какой то код
}

Но дело в том, что необходим запуск функции через 30 секунд(если до этого не ответит клиент). Пробовал осуществить так:
socket.on("one", function(result){
if(result===...){
foo();
}
});
var interval;
function foo(){
clearInterval(interval);
//какой-то код, запуск других функций и т.д.
interval=setInterval(function(){foo();}, 30000);
}

Но по мне объявление глобальной переменной в серверном коде не есть хорошо. К тому же, запросы от клиента приходят в различное время(через 5, 10, 15 сек.) и ускорение интервала все равно происходит. Чем можно искоренить данную проблему?
  • Вопрос задан
  • 117 просмотров
Пригласить эксперта
Ответы на вопрос 1
vitali1995
@vitali1995
Начнём с того, что переменная не глобальная - в серверном коде она будет доступна только на уровне модуля, поэтому это нормальная практика, называемая замыканием (альтернатива - использовать классы). Запросы в такой форме записи будут приходить в разное время и с этим придётся смириться - асинхронный node.js вызывает колбэк таймера только после отработки предыдущей очереди колбэков в event loop. Если нужны точные интервалы, нужно ответвлять отдельный поток процесса, в этом случае хорошей практикой будет вынести этот таймер отдельной службой, чтобы не иметь общую область памяти с основной частью приложения (см. опасности многопоточного программирования).
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы