2017-02-17 3 views
1

Handhabung Ich bin mitsocket.emit() Fehler mit Socket.io

$('btn').click(function() { 
    socket.emit('load more', function (objs) { 
     // do something 
    }); 
}); 

auf dem Client-Objekte von dem Server zu erhalten.

Aber manchmal ist die Verbindung verloren und nichts passiert. Wie kann ich die Fehlerbehandlung so vornehmen, dass ich dem Benutzer sagen kann, dass der Server nicht antwortet, anstatt dass nichts passiert, wie es jetzt ist?

bearbeiten

Also, was ich will, ist so etwas wie

$('btn').click(function() { 
    var emit = socket.emit('load more', function (objs) { 
     // do something 
    }); 

    if (!emit) { 
     console.log("It didn't work. Maybe you lost connection or the server is not running."); 
    } 
}); 

Ich weiß, dass ich das nicht tun kann, aber wäre es möglich, Versprechen oder etwas mit?

+0

Warum nicht 'socket.on ('error', function())' –

+0

oder etwas wie 'socket.on ('trennen', function() {});', 'socket.connected',' socket .disconnected' –

+0

weil ich will, um den Benutzer nicht sagen, dass die er/sie nicht angeschlossen ist, wenn er/sie nicht alles tun, das ein websocket löst – Jamgreen

Antwort

1

Das zweite Argument zu emit sind die Daten, die wir für das Ereignis 'load more' übergeben müssen.

Wenn Sie möchten nur wissen, dass Sie Daten benötigen, ohne irgendwelche zusätzlichen Informationen zu übergeben, tun Sie einfach socket.emit('load more'). Warten Sie im Server auf das Ereignis 'load more' und senden Sie Daten an den Client mit einer bestimmten event-name. In Client hört für das Ereignis 'event-name' und Empfangen von Daten in Rückruf wie

socket.on('event-name', function(data_from_server){ 
    //do something 
}); 

Wenn Sie den Fall behandeln wollen, wo Server senden dann alle Daten für einige Zeit warten, nachdem das Ereignis 'load mode' und damit umgehen zu senden.

+0

Ich glaube nicht, dass ich sogar vom Server hören muss. Indem ich eine Funktion in 'socket.emit 'übergebe, kann ich die Daten einfach vom Server an den Client senden. Aber ich weiß nicht, wie ich damit umgehen soll, wenn der Websocket nicht gesendet wurde. – Jamgreen

+0

Ich habe meine Frage aktualisiert – Jamgreen

+1

Warum haben Sie keine Flagge wie 'socketValid' und deaktivieren Sie sie, wenn 'disconnect' oder' error' event emittiert wird? Wenn der Benutzer versucht, Daten zu laden, markieren Sie das Flag und benachrichtigen Sie den Benutzer. Oder wenn Sie ein Ereignis über den Socket senden möchten, prüfen Sie den Status mit der Eigenschaft 'socket.connected' und entscheiden Sie entsprechend. Wenn der Socket aktiv/gültig ist, geht die Nachricht immer an den Server, da er auf TCP aufgebaut ist, glaube ich – RaR