Как правильно реализовать setInterval на node js?

Доброго времени суток.
Есть такой setInterval, который по истечению 15 секунд меняет ход игрока (если игрок не сделал ход):
socket.on('addChip', async (chipInfo) => {
  // ...
  let timeID = setInterval(async () => {
    const nextQueue = await game.timerCheck(_chipInfo);
    if (nextQueue === undefined) {
      clearInterval(timeID);
      return;
    }
    socket.emit('nextQueue', nextQueue);
    socket.broadcast.to(token).emit('nextQueue', nextQueue);
    return;
  }, 15*1000);
  // ...
});

и
exports.timerCheck = async (chipInfo) => {
  let _queue;
  // ...
  const gameInfo = await client.hgetall('game:' + gameIDs);
  if (parseInt(gameInfo.step) !== chipInfo.step || gameInfo.state !== 'run') { 
  /* по идей timer не должен проходить (parseInt(gameInfo.step) !== chipInfo.step) */
    return;
  }
  // update queue
  gameInfo.queue === gameInfo.player1
    ? _queue = gameInfo.player2
    : _queue = gameInfo.player1;
  await client.hset('game:' + gameIDs, 'queue', _queue);
  return _queue;
};

Проблема в том, что timeID не убиваются, т.е. если игроки делают N ходов, то создаются N счетчиков. И как результат "переход хода" по таймеру начитает срабатывать чаще. Что не так? И как это можно исправить?
П.С. буду благодарен, если заметите что-нить кривое ("вырви глазное"), и сообщите дополнительно ;)
  • Вопрос задан
  • 928 просмотров
Решения вопроса 1
@nurdus Автор вопроса
Ура, товарищи, сам решил свой вопрос нужно было просто передать переменную :)
let timeID = setInterval(async (chipInfo) => {
    const nextQueue = await game.timerCheck(chipInfo);
    if (nextQueue === undefined) {
      clearInterval(timeID);
      return;
    }
    socket.emit('nextQueue', nextQueue);
    socket.broadcast.to(token).emit('nextQueue', nextQueue);
    return;
  }, 15*1000, _chipInfo);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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