Я создаю приложение на основе сокетов с реагированием и узлом / express. После выполнения события io.on ('connection') пользователь добавляется в массив пользователей с помощью функции addUser({id:socket.id, name, room})
, которая вызывается в событии socket.on ('join'). При попытке отправить массаж im с использованием socket.on ('sendMsg') и вызова функции getUser (socket.id), но по какой-то причине он отправляет другой идентификатор функции.
io.on('connection',(socket)=>{
socket.on('join',({name,room})=>{
const user = addUser({id:socket.id, name, room})
socket.join(user.room)
socket.emit('message',{user:'admin',text:`${user.name}, welcome to the room ${user.room}`})
socket.broadcast.to(user.room).emit('message',{user:'admin', text:`${user.name} has joined`})
socket.on('disconnect',()=>{
console.log('usre left')
})
})
socket.on('sendMsg',(msg, callback)=>{
console.log('what the fuck is this:', socket.id)
const user = getUser(socket.id)
console.log(user)
io.to(user.room).emit('message',{user:user.name,text:msg})
callback()
})
})
const addUser = ({id, name, room}) =>{
const existingUsers = users.find(user=>user.room === room && user.name === name)
if(existingUsers) {
console.log('not adding')
return {error:'User name is taken'}
}
const user = { id, name, room}
users.push(user)
console.log('users updated, ' ,users)
return user
}
const getUser = (id) =>{
console.log(users)
return users.find(user=> user.id === id)
}
Я понятия не имею, почему это происходит. кто-нибудь?