Cuando ejecuto código
var ws = new WebSocket("wss://mydomain.example/socket/service"); ws.addEventListener("error", function (error) { console.error("Got error=", error); }); ¿Es posible que la conexión WebSocket falle (emita error ) antes de que pueda adjuntar el detector de eventos para el evento de error ?
Mirando la documentación https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/WebSocket No puedo ver este detalle documentado en ninguna parte.
De acuerdo con la especificación WHATWG , parece que el constructor debe ejecutar la solicitud en paralelo . ¿Hay alguna garantía de que pueda adjuntar el detector de errores antes de que surjan posibles errores?
El constructor de WebSocket se ejecuta sin sincronización de ningún tipo y la conexión puede encontrar un error antes de la línea con ws.addEventListener("error", ...); ¡es ejecutado! Sin embargo, esto no es un problema porque la especificación también dice que, en caso de error, el evento de error real se activa como parte de los pasos que deben ponerse en cola como una tarea. En la práctica, esto significa que, lógicamente, se requiere que el constructor de WebSocket se comporte como si fuera a ejecutar una función anónima con cero tiempo de espera que activa el evento de error .
Por lo tanto, el error real puede ocurrir antes de que el código JS pueda adjuntar el detector de eventos, pero todos los eventos ( open , close , error , message ) solo se pueden activar con retraso después de que se ejecute el bucle de eventos la próxima vez, por lo que el código anterior siempre tendrá tiempo. adjunte los controladores de eventos antes de que se puedan activar los eventos.
Consulte https://github.com/whatwg/websockets/issues/13#issuecomment-1039442142 para obtener más detalles.