управлять пользователями в socket.io - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь управлять позицией / порядком каждого пользователя, вошедшего в мое приложение. Я сделал массив, который обновляется каждый раз, когда кто-то входит. до сих пор работает нормально.

[...]
var row_of_users=[];//my array of users.
var visits=0;//just a count of users logged in.

io.on('connection', function(socket){
var user=socket.id;
visits++;
row_of_users.push(user);
console.log(row_of_users);
[...]

в console.log показывает:

['BnUtfcyNniEWNwN3AAAA', 'IkE3l4oMBXt5dEsOAAAB', 'T5gzbSru7oDR44T7AAAC', 'yB2X4G55YqcvDgHcAAAD']

но когда пользователь уходит, socket.io игнорирует user.id и удаляет последний объект в массиве.

socket.on('disconnect', function(){
visits--;
row_of_users.pop(user);
});

если я закрою ПЕРВАЯ пользовательская вкладка в моем браузере (** BnUtfcyNniEWNwN3AAAA ) в console.log, теперь это будет показано: **

['BnUtfcyNniEWNwN3AAAA', 'IkE3l4oMBXt5dEsOAAAB', 't5gzbSru7oDR44T7AAAC']

как если бы последний пользователь отключился.

Что здесь происходит? и как я могу обновить массив правильно? Я не опубликовал весь код, потому что мой язык португальский, а переменные тоже на португальском.

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

array.pop() не принимает аргументов и всегда выводит последний элемент.

От MDN:

Метод pop () удаляет последний элемент из массива и возвращает этот элемент.

Чтобы удалить N-й элемент, используйте:

array.splice(N, 1)

Или в вашем случае:

row_of_users.splice(row_of_users.indexOf(user), 1)

0 голосов
/ 08 мая 2018

Ваш ответ лежит здесь: Как удалить конкретный элемент из массива в JavaScript?

По сути, вы будете использовать indexOf (socket.id) и склеивать этот индекс измассив row_of_users.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...