Вы правы, что требуется некоторое время, чтобы войти в комнату. Тем не менее, setTimeout
- плохое решение, так как время, необходимое для входа в комнату, непредсказуемо. Носик также может не войти в комнату.
Хорошая новость заключается в том, что socket.join()
является асинхронным методом и принимает обратный вызов в качестве второго аргумента. Так что используйте это так:
socket.join('login-room', () => {
io.in('login-room').emit('update-users', getAllUsers());
);
@ l-faros также прав в том, что ваш getAllUsers()
метод может быть асинхронным, поэтому у вас там будет другая проблема того же рода.
Боюсь, у вас может быть пробел в знаниях JS, который я советую восполнить, прочитав асинхронность JavaScript, обратные вызовы, обещания и все такое (Google - ваш друг).