Modificar una variable desde el server con Socket.io

Necesito cambiar unas variables de un script de la vista de mi proyecto, pero necesito hacerlo desde el servidor o hacer que la variable tome el valor que le mando a través de websockets.

Yo intenté lo siguiente:

//EN EL SERVER

io.sockets.on("connection",function(socket){

    socket.emit("NombreDelSocket",UnDatoJSON);
});


//EN EL CLIENTE

var Nombre;

var socket = io.connect(RUTA DEL SERVIDOR);

socket.on("NombreDelSocket",function(data){

   //data es UnDatoJSON que mando el servidor
    Nombre = data[0].nombre; 
    console.log(Nombre);
});

Cuando yo chequeo la consola del navegador, efectivamente la instrucción console.log(Nombre), me imprime el nombre que quise mandar. Muy bien, pero no me modifica el nombre de la variable. Si yo ese mensaje de la consola lo muestro afuera de ese método del socket, me dirá que el nombre es undefined.

No se si comprenden lo que quiero hacer. Simplemente quiero setear una variable de un script del cliente, pero no se como hacerlo desde websockets.

2
задан 27.10.2016, 07:59
4 ответа

funciГіn, что перемещает себя в mГ©todo socket.on("NombreDelSocket", выполнено в algГєn момент во времени благодаря тому, что это асинхронное событие.

, Если я показываю это сообщение консоли снаружи этого метода socket, скажет мне, что имя - undefined.

, Так как ты не инициализировал переменную Nombre стоимость, undefined. Ошибка коренится в том, что ты пробуешь logear стоимость переменной Nombre, когда todavГ - в событие NombreDelSocket я не работаю.

, когда я проверяю консоль браузера, действительно instrucciГіn console.log (Имя) печатает мне имя, которое я захотел послать, очень хорошо, но не изменить мне имя Переменной.

Стоимость переменной Nombre, если он изменяется, только, что не немедленно, ты должен надеяться на то, что событие NombreDelSocket выполнено.

возможная Одна soluciГіn состояла бы в том, чтобы призывать одну funciГіn, чтобы сообщать, что Nombre был изменен.

Например:

//EN EL CLIENTE
var Nombre;
var socket = io.connect(RUTA DEL SERVIDOR);
socket.on("NombreDelSocket",function(data){

   //data es UnDatoJSON que mando el servidor
    Nombre = data[0].nombre; 
    avisarQueNombreFueSeteado();
});
function avisarQueNombreFueSeteado() {
   console.log(Nombre);
}
2
ответ дан 24.11.2019, 12:53
  • 1
    Much и # 237; пропасти спасибо. И поскольку я делаю для того, чтобы он был прямым? – bousing 28.10.2016, 01:51
  • 2
    Из-за которого habr и # 237; схвати хотения сделать это? Считай, что: Node.js usa un modelo de operaciones E/S sin bloqueo y orientado a eventos. И из-за небольшого количества, которое ты показываешь в твоем коде, UnDatoJSON конечно - немного нагруженный asincronicamente, и следовательно это мне не кажется возможным – Marcos 28.10.2016, 15:05
  • 3
    Потому что я нуждаюсь в том, чтобы поместить данные в эту стоимость переменных в рукописном шрифте клиента для того, чтобы было видно Ваше изменение в виде. Pens и # 233; что использование websockets я решать и # 237; в проблему, потому что это связи между клиентом и sevidor. И, как кажется, я met и # 237; в другой проблеме – bousing 29.10.2016, 18:23
  • 4
    Если ты можешь поставлять RUTA DEL SERVIDOR, я могу пробовать помогать тебе решать проблему. – Marcos 31.10.2016, 14:19

Возможное решение твоей проблемы состоит в том, чтобы изменять прямо элемент html со стоимостью имени, полученного с сервера.

Например, если того, что у тебя есть, один < p пойдите = "myP" > и ты хочешь, чтобы у него было имя человека, что ты можешь делать, заменять console.log (Имя) из-за document.myP.innerHTML = Имя, или используя jQuery $ ('#myP') .text (Имя). Ты должен иметь в виду, что, когда это событие взорвется, он состоит в том, что ты можешь показывать данные, что ты любишь пользователя.

0
ответ дан 24.11.2019, 12:53

То, что возможно делать, состоит в том, чтобы реализовывать свежесть вида, но это зависит от от, как ты работал, изменение совещаний, примера, если он jquery, коснулось бы делать обновление tag где этот переменная, или если она угловая, серьезная обновлять переменную scope, так что, когда он прибудет она seГ±al socket io, работала функция, предложенная в немедленно предыдущем ответе и было бы призвано изменение в dom или свежести scope

0
ответ дан 24.11.2019, 12:53

Я вижу, что то, что ты нуждаешься в том, чтобы сделать, состоит в том, чтобы изменять "что-то" используя стоимость, которая приходит из сервера. Ты должен иметь в виду, что событие NombreDelSocket работает, когда устанавливают ее conexiГіn и это происходит очень конечно после того, как весь твой javascript cargГі и ejecutГі, поэтому переменная Nombre эта опустошает изначально.

в дополнении с ответом @marcos, я хочу добавить: она soluciГіn тогда она простая, ты должен применять изменения, когда событие названо, что-либо подобное:

//EN EL CLIENTE

var Nombre;

var socket = io.connect(RUTA DEL SERVIDOR);

socket.on("NombreDelSocket",function(data){

   //data es UnDatoJSON que mando el servidor
    Nombre = data[0].nombre; 
    console.log(Nombre);
   // en este instante tu variable que tiene "algo" asi que puedes usarla.
    modificaAlgo();
    });

// funcion que utiliza la variable nombre, para hacer algo!
   function modificaAlgo(){
     // aqui escribes las instrucciones y puedes usar la variable Nombre que ya tiene algún valor.
   }
0
ответ дан 24.11.2019, 12:53
  • 1
    Much и # 237; пропасти спасибо. Я sirvi и # 243;. – bousing 03.11.2016, 02:19

Теги

Похожие вопросы