Как остановить таймер на сервере nodejs?

145
07 марта 2019, 04:00

перепробовал уже все методы, не могу остановить таймер на сервере nodejs. Пробовал разные варианты и с setInterval и setTimeout. Получаю всегда дальше работающий таймер.

function myTimer(room,step){
    holand.get(room, function(err, reply) {
        console.log(reply);
        var newcena = reply - step;
        console.log('New price '+newcena);
        holand.set(room, newcena);
        socket.emit('iscena', newcena.toFixed(2));
    });
}
var timerId;
console.log('1 '+timerId);
socket.on('howcena', function(data){
    var room = data.room;
    var step = data.step;
    console.log(room);
    console.log(step);
    timerId = setTimeout(function tick() {
      myTimer(room,step);
      timerId = setTimeout(tick, 5000);
    }, 5000);
    console.log('2 '+timerId);
});
socket.on('stopcena',function(data){
    clearTimeout(timerId);
    console.log('3 '+timerId);
    console.log('Stop timer');
});
Answer 1
var timerId;
function myTimer(room,step){
  holand.get(room, function(err, reply) {
    console.log(reply);
    var newcena = reply - step;
    console.log('New price '+newcena);
    holand.set(room, newcena);
    socket.emit('iscena', newcena.toFixed(2));
  });
}
function tick() {
  myTimer(room,step);
  if (timerId) {
    timerId = setTimeout(tick, 5000);
  }
}
console.log('1 '+timerId);
socket.on('howcena', ({ room, step }) => {
  console.log(room);
  console.log(step);
  timerId = setTimeout(tick, 5000);
  console.log('2 '+timerId);
});
socket.on('stopcena', () => {
  clearTimeout(timerId);
  timerId = null;
  console.log('3 '+timerId);
  console.log('Stop timer');
});

Проблема в том что clearTimeout остановит таймер только после последнего выполнения функции, в которой нет никакого условия преграждающего запуск следующего таймера. Решение ― написать какое-то условие чтобы не запускать таймер.

READ ALSO
Клик по элементу JS

Клик по элементу JS

Нужно написать скрипт, который при открытии страницы нажимает на тизер с рекламойСкелет:

169
Как сделать PopUp (модальное окно) чтобы оно срабатывало только по нажатию мыши?

Как сделать PopUp (модальное окно) чтобы оно срабатывало только по нажатию мыши?

Нашел в интернете как сделать модальное окноКод рабочий, но только есть один нюанс, модальное окно срабатывает когда пользователь заходит...

155
Алгоритм увеличения изображения при mousewheel

Алгоритм увеличения изображения при mousewheel

Подскажите пжл алгоритм увеличение картинки к точке, в зависимости от курсора мыши над этой картинкойНе могу понять как вычислить дельту...

190
Вернуть n массивов

Вернуть n массивов

Есть массив данных в котором может находиться не ограниченное кол-во объектовХочу написать функцию которая будет возвращать каждые 10 элементов...

162