@isolatist

Hello, long polling react + express.js поможете исправить баг??

Начал изучать реакт (поэтому в хуках пока не разбираюсь). В общем, такая ошибка. Хочу сделать крестики нолики через long polling.

Компонента с игрой:
function Game(props) {
	useEffect(() => {
		getField()
	}, [])

	const getField = () => {
		console.log('get');
		axios.get('http://localhost:3001/game-get')
			.then(response => {
				props.setNewField(response.data.field)
				props.updateStatus(response.data.status)
				getField()
			})
			.catch(err => {
				console.log(err);
			})

	}

	const updateField = (event) => {
		console.log('update');
		if (event.target.id.match('^c[0-9]$')) {
			axios.post('http://localhost:3001/game-post', { id: event.target.id })
		}
	}
	return (
		<div className={classes.wrapper}>
			<a href="/" className={classes.goBack}>Go to the menu</a>
			<div className={classes.status}>{props.status}</div>
			<div className={classes.shield} onClick={updateField}>


Сервер на express.js:
const server = express()                      
const PORT = process.env.PORT || 3001       
server.use(cors())                        
server.use(express.json())              
const emitter = new events.EventEmitter()  

server.listen(PORT, () => console.log('Server is working at ' + PORT + ' port'))

//Обработка get-запроса
server.get('/game-get', (req, res) => {
	emitter.once('changing', game => {
		res.json(game)
	})
})
//Обработка Post-запроса
server.post('/game-post', (req, res) => {
	emitter.emit('changing', gameHndlr(req.body.id))
}); // gameHndlr - обработчик логики игры<img

Параметры сети:
src="https://habrastorage.org/webt/63/2c/8a/632c8a806ac..." alt="image"/>
Получается после каждого post-запроса у меня появляется еще один "висящий"
У меня скоро кукуха поедет, как это исправить??
  • Вопрос задан
  • 189 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
28 нояб. 2024, в 14:18
1500 руб./за проект
28 нояб. 2024, в 14:14
200000 руб./за проект
28 нояб. 2024, в 14:12
300000 руб./за проект