Disons que j'ai un serveur de nœud démarré avec le port nn
, et qu'il n'y a pas de service WebSocket dessus.
Et le problème est que mon client essaie de connecter un service WebSocket à ce serveur.
Évidemment, la connexion au serveur ne devrait pas échouer.
Mais je ne pouvais pas attraper cette erreur, mon code client est le suivant:
try {
this.ws = new WebSocket('ws://xxx:nn');
} catch ( e ) {
fallback();
console.warn(e);
}
Mon attente est que la méthode fallback
soit appelée lors de l'échec de la connexion, mais en réalité l'erreur n'est pas interceptée par ce qui précède try...catch
Est-ce que quelqu'un sait comment détecter l'erreur dans mon cas d'utilisation?
Vous pouvez vous inscrire pour le rappel onError de l'objet websocket
exampleSocket.onerror=function(event){
console.log("Error");
}
Vous pouvez vous référer à l'exemple suivant. http://jsfiddle.net/g28yuymv/1/
exemple d'erreur de capture http://jsfiddle.net/g28yuymv/4/
En regardant la spécification HTML5 WebSockets, vous pouvez transmettre une valeur à la méthode close (). Ensuite, sur l'écouteur d'événement onclose (), vous pouvez vérifier cette valeur. Cela vous donne la possibilité de définir des gestionnaires pour différents scénarios de déconnexion, puis de gérer tout le reste comme une erreur générique.
https://developer.mozilla.org/en-US/docs/Web/API/WebSocket#close ()
var _websocket;
function wsConnect() {
if (_websocket) {
_websocket.close(3001);
} else {
_websocket = new WebSocket("wss://echo.websocket.org1");
_websocket.onopen = function() {
console.log('connected');
};
_websocket.onmessage = function(msg) {
console.log(msg);
};
_websocket.onclose = function(evt) {
if (evt.code == 3001) {
console.log('ws closed');
_websocket = null;
} else {
_websocket = null;
console.log('ws connection error');
}
};
_websocket.onerror = function(evt) {
if (_websocket.readyState == 1) {
console.log('ws normal error: ' + evt.type);
}
};
}
}
wsConnect();
doux violon: https://jsfiddle.net/lamarant/ry0ty52n/
la propriété readyState prend la valeur 1 lorsque la connexion est établie et peut donc être utilisée pour déterminer l'état de la connexion. La connexion socket prend généralement moins de 1 seconde. Nous pouvons donc prendre un intervalle de 3 secondes en toute sécurité, puis vérifier l'état de la connexion.
Voici le code:
this.ws = new WebSocket('ws://xxx:nn');
setTimeout(() => {
if (this.ws.readyState !== 1) {
alert("Problem connection , kindly contact system admin .");
}
}, 3000);
les réponses ci-dessus ne peuvent pas être correctes. Vous voulez le traiter comme une erreur. Mais ce message est plus un avertissement/info qui montre quand ce qui suit se produit.
WebSocketTransport.prototype.close = function() {
debug('close');
var ws = this.ws;
this._cleanup();
if (ws) {
ws.close();
}
};
correct devrait être:
exampleSocket.onclose = async (event) => {
console.error(event);
//do what you want
}