Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

193
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!