#javascript #socket.io
#javascript #socket.io
Вопрос:
У меня есть функция, которая дает мне объект сокета внутри функции io.on(). Однако, когда я пытаюсь присвоить новое свойство его объекту внутри функции socket.on, я не могу использовать свойство вне функции socket.on . Консоль показывает мне это —
roomName
#undefined
Я хочу знать, как я могу использовать свойство и вне объекта.
io.on("connection", function(socket) {
socket.on("join_group", function(user, roomnum) {
socket.userName = user;
socket.selfRoom = roomnum;
socket.join(roomnum);
console.log(socket.selfRoom);
});
socket.on("msg", function() {
console.log("#" socket.selfRoom);
});
});
Ответ №1:
Я хочу знать, как я могу использовать свойство и вне объекта.
Вы устанавливаете свойство для внешнего объекта socket
в функции обратного вызова для on
события.
Но к моменту on
вызова обработчика событий console.log("#" socket.selfRoom);
оператор outside уже выполнен.
Пожалуйста, обратите внимание, что
-
Определение обработчика событий
socket.on("join_group", function(user, roomnum) {
не совпадает с вызовом этого обработчика событий (метода обратного вызова). -
JavaScript является однопоточным и работает по модели цикла событий, поэтому при запуске события этот обработчик событий переходит в очередь цикла событий, которая будет выполнена после текущей задачи задача уже в очереди.
Комментарии:
1. Извините, я отредактировал свой вопрос. Пожалуйста, посмотрите. Я действительно хотел знать, как я могу добавить свойства к внешнему объекту изнутри другой функции, чтобы эти свойства не ограничивались областью действия функции.
2. @DhruvChadha оно не ограничивается областью действия функции, оно устанавливается только на тот же объект.
3. Тогда почему я получаю #undefined (пожалуйста, взгляните на отредактированный код)?
4. @DhruvChadha вывод будет зависеть от того, какое событие запускается первым. Можете ли вы попробовать сделать противоположный способ проверить свою теорию?