es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No capturado (en la promesa): No se puede enviar datos si la conexión no está en el estado ‘Conectado’. mientras se conecta SignalR con Angular.

Mientras conecto el SignalR con Angular, estoy obteniendo el error “Uncaught (in promise): Error: No se pueden enviar datos si la conexión no está en el estado ‘Connected'”.

Y mi código es:

servicio-dashboard.ts

private hubConnection: signalR.HubConnection
initWebSocket() {
    this.hubConnection = new signalR.HubConnectionBuilder()
      //.configureLogging(signalR.LogLevel.Debug)
      .withUrl('http://localhost:5000/Notification',{
       skipNegotiation: true,
        transport: signalR.HttpTransportType.WebSockets
      })
      .build();
  this.hubConnection
      .start()
      .then(() => console.log('Conexión iniciada'))
      //.then(() => console.log(this.hubConnection.connectionId)
      .catch(err => console.log('Error al iniciar la conexión: ' + err))

  const EmailId = "abc@mail.com";
  this.hubConnection.invoke("Registerd", EmailId);
  console.log("Registrado", EmailId);
}

¿Alguien puede ayudarme a superar este error?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que la conexión no está en estado ‘Connected’ al intentar enviar datos. Para evitar este error, asegúrese de que la conexión esté completamente establecida antes de intentar enviar datos.

    En su código, los datos se envían inmediatamente después de iniciar la conexión, lo cual puede no ser lo suficientemente rápido siempre. Puede intentar mover el método ‘invoke’ dentro del bloque ‘then’ después de que la conexión se establezca correctamente, como se muestra a continuación:

    this.hubConnection
      .start()
      .then(() => {
        console.log('Conexión iniciada');
        const EmailId = "abc@mail.com";
        this.hubConnection.invoke("Registrado", EmailId);
        console.log("Registrado", EmailId);
      })
      .catch(err => console.log('Error al iniciar la conexión: ' + err))
    

    Esto asegura que los datos solo se envíen después de que se establezca la conexión, evitando el error.

Comments are closed.