Доброго времени суток.
Есть такой 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 счетчиков. И как результат "переход хода" по таймеру начитает срабатывать чаще. Что не так? И как это можно исправить?
П.С. буду благодарен, если заметите что-нить кривое ("вырви глазное"), и сообщите дополнительно ;)