Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

190
Vistas
función websocket anidada que siempre devuelve indefinido

Estoy usando websockets de esta biblioteca: https://www.npmjs.com/package/websocket
Esta es una función en React.ts 17 que recupera con éxito los datos del servidor, pero no devuelve los valores de la función en sí.

 const recieveMessages = () => { client.onmessage = (message: any) => { const dataFromServer = JSON.parse(message.data) console.log(dataFromServer) //This successfully logs the data return dataFromServer //This is always returned as undefined } //I've tried a few versions with the return statement here without any success. }

¿Cómo puedo hacer que la función reciveMessages devuelva los datos de la función client.onmessage ?

Actualización: estoy tratando de separar toda la lógica en un gancho React separado (useWebSocket) que actualmente se ve así:

 import { w3cwebsocket } from 'websocket' export const useWebSocket = () => { const client = new w3cwebsocket('ws://127.0.0.1:8000') const connectToServer = () => { client.onopen = () => { console.log('Websocket client connected') } } const recieveMessages = () => { client.onmessage = (message: any) => { const dataFromServer = JSON.parse(message.data) console.log('reply from server: ', dataFromServer) return dataFromServer } } const sendMessage = (message: any) => { client.send(JSON.stringify('lol')) } const onCloseServer = (event: CloseEvent) => { console.log(event) } return { connectToServer, recieveMessages, sendMessage, onCloseServer } }

Luego intento ejecutar la función dentro de useEffect en un componente separado como este: El deseo es establecer los siguientes datos dentro del estado local de este componente.

 useEffect(() => { recieveMessages() setState(recieveMessages()) //This is always undefined }, [])
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Esto requiere un gancho useState dentro de su gancho useWebSocket .
Siempre que client.onmessage reciba un mensaje, almacene ese mensaje dentro de un estado y actualícelo cada vez que reciba otro mensaje.

Luego devuelva el estado del gancho.

 import { useState } from 'react' import { w3cwebsocket } from 'websocket' export const useWebSocket = () => { const [receivedMessage, setReceivedMessage] = useState('') const client = new w3cwebsocket('ws://127.0.0.1:8000') client.onmessage = (message: any) => { const dataFromServer = JSON.parse(message.data) setReceivedMessage(dataFromServer) } const sendMessage = (message: any) => { client.send(JSON.stringify(message)) } return { receivedMessage, sendMessage, } }

Entonces impleméntalo así. El valor del mensaje receivedMessage es el estado que se actualizará y se puede monitorear con un useEffect para hacer algo cada vez que se recibe un mensaje.

 const { receivedMessage, sendMessage } = useWebSocket() useEffect(() => { if (receivedMessage !== '') { // Do something whenever the received message is changed. sendMessage('Received you loud and clear') } }, [receivedMessage])
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda