Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

151
Visualizações
¿Por qué la colección no se pasa al lado del cliente?

Creo un objeto de mapa y escribo la identificación en la clave, el nombre de usuario como valor, todo funciona bien en el lado del servidor, la colección se envía a la consola, pero cuando lo paso al lado del cliente, no es transferido correctamente o no funciona en absoluto. Todo funcionó bien con la matriz. Servidor:

 socket.on('connect user', (userName) => { //users.push(userName.userConnect); users.set(id++, userName.userConnect); // map users console.log(users); io.emit("users", users); // passing the collection

Cliente:

 const addUserToModalWindow = () => { const contentWindow = document.querySelector(".usersList"); socket.on('users', (users) => { for (let user of users) { console.log(user); } }); };

Escribe un error: los usuarios no son iterables.

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

El problema se debe a la biblioteca que está utilizando, socket.io convierte el objeto de carga útil a JSON durante la comunicación entre el lado del cliente y el lado del servidor.

Sin embargo, no puede convertir un objeto Map o Set a JSON directamente. Puedes intentarlo:

ingrese la descripción de la imagen aquí

Una captura de pantalla del documento :

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo Relatório

0

Está intentando pasar objetos JavaScript a través del socket TCP (http, web-socket). Los sockets TCP no son específicos del idioma y no pueden manejar objetos js nativos. Pero pueden trabajar con cadenas y datos binarios.

Pero la biblioteca socket.io es bastante inteligente y puede darse cuenta de que está pasando un objeto. Ejecutará JSON.stringify en su valor (se convertirá en una cadena), luego lo enviará a través de la red y en el lado del cliente lo convertirá de nuevo al objeto con JSON.parse .

Todo funcionaría si se usaran objetos simples. Pero en este caso se usa ES6 Map . Cuando se usa JSON.stringify en el mapa, siempre se convertirá en un objeto vacío. Me gusta esto:

Servidor

 const map = new Map(); map.set(1, { name: "Joh Doe" }); JSON.stringify(map); // '{}'

Cliente

 JSON.parse(map); // {}

Luego, en el lado del cliente, intenta hacer for of bucle en un objeto vacío. Este tipo de bucle funcionará en el Map ES6 pero no en el objeto.

 for (const v of {}) console.log(v) // is not iterable Error
 for (const v of new Map()) console.log(v) // works fine

La solución a este problema es bastante simple: no intente enviar ES6 Map. Use un objeto simple en su lugar.

En lugar de esto:

 const users = new Map(); users.set(1, { name: "Joh Doe" });

Utilizar esta:

 const users = {}; users[1] = { name: "Joh Doe" };

Lado del cliente:

 socket.on('users', (users) => { for (let user of Object.values(users)) { console.log(user); } });
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda