Я хотел бы попросить вас о помощи. Мне сложно с этой функцией. Он должен проверить, есть ли в помещении 0 или 1 клиент внутри, а затем дает информацию о том, может ли другой клиент присоединиться к комнате или нет (максимум 2 пользователя в комнате). У меня нет идей о том, как получить количество клиентов в комнате. Я проверил сайт, и было довольно много ответов на эту тему, работая с более ранними версиями socket.io. Теперь я пришел к этой функции:
io.in(room).clients((err, clients) => {
console.log(clients.length);
});
Он работает и регистрирует нужное количество клиентов внутри комнаты, но я понятия не имею, как вернуть это значение во внешнюю функцию.
Пользователь var user
состоит из целого JSON, и мне было интересно, есть ли более быстрый способ вернуть длину массива, не врываясь в JSON.
Там внешняя функция:
function isRoomFree(room) {
var user = io.in(room).clients((err, clients) => {
console.log(clients.length);
});
//console.log(user);
if(user < 2)
return true;
else
return false;
}
Есть ли способ сделать это? Я новичок в js, socketio и node.js
Ваша функция isRoomFree(room)
по существу синхронна, то есть вы вызываете ее, и вы ждете результата, однако io.in(room).clients
асинхронно, что означает, что вы не знаете, когда результат прибудет.
Смешивание двух из них представляет проблему.
Что вам нужно сделать, так это изменить свою функцию, чтобы стать async. Я предлагаю вам ознакомиться с концепцией.
function isRoomFree(room, callback) {
var user = io.in(room).clients((err, clients) => {
if(clients < 2)
callback(true);
else
callback(false);
});
}
Используйте его так:
isRoomFree(room, function(status) {
if (status)
console.log("free");
else
console.log("not free");
//continue your program logic inside the callback
});