Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.05.2018, 02:07
Интересующийся
Отправить личное сообщение для monstantin Посмотреть профиль Найти все сообщения от monstantin
 
Регистрация: 04.01.2017
Сообщений: 12

Socket.io Асинхронный таймер
Всем привет, идея в том, что бы реализовать таймер обратного отсчета, для разных страниц

Клиент
( _id Это уникальный id для каждой страниц, страниц много поэтому у каждой свой таймер )
То есть клиент заходит на страницу, на странице есть кнопка обновить
таймер, при нажатии срабатывает событие offer


socket.emit('connectRoom', { id_room : _id });
socket.on("timerUpdate", data => console.log(data)  );

socket.emit('offer', { id_room : _id });


Сервер


io.on('connection', function(socket){

    let obj = { time : null };
    
    // Создаем отдельную комнату для текущей страницы
    socket.on('connectRoom', function(data){
        socket.join(data.id_room);
    });
    
    // Функция таймера 
    let timer = (id_room) => {
      let i = 60;
      obj.time = setInterval(() => {
         io.sockets.in(id_room).emit('timerUpdate', i); 
         i--;
      }, 1000);
    };

    // При получении события обновить удаляем старый таймер 
    // и запускаем новый
    socket.on('offer', function(data){
        clearInterval(obj.time);
        timer(data.id_room);
    });


});



Все работает не так как хотелось, то есть клиент заходит на определенную страницу, запускает таймер кнопкой обновить
таймер запускается и все работает хорошо

Если заходит новый клиент на ту же страницу он видит текущий таймер
И это тоже здорово
Но если новый клиент обновит таймер то функция clearInterval не срабатывает и в консоли следующая картина

Запустил таймер 1 клиент
60
59
58
...
...



Зашел новый клиент и обновил таймер
60
57
59
56
58
...
...
...

То есть работают 2 таймера одновременно, соответсвено если 3 клиент обновит таймер то уже 3 параллельных таймера

Вопрос в том, как избежать такое поведение и сделать один общий таймер для текущей комнаты

Последний раз редактировалось monstantin, 02.05.2018 в 02:11.
Ответить с цитированием
  #2 (permalink)  
Старый 04.05.2018, 00:48
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,596

Очевидно: вынести таймер из on connection...
__________________
29375, 35
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Индивидуальный таймер обратного отсчета времени с редиректом pozitiv4ek Работа 2 11.12.2016 13:42
Таймер на вкладках в Хроме. YNA Opera, Safari и др. 1 28.01.2016 02:43
помогите чтобы таймер тикал Руслан904322 Общие вопросы Javascript 1 22.02.2015 12:43
Обновляемый таймер на javascript smillyhamster Общие вопросы Javascript 1 31.12.2013 10:30
Зацикленный таймер jacko Общие вопросы Javascript 2 01.07.2012 14:32