2017-07-29 4 views
0

Ich habe Probleme beim Refactoring des folgenden Codeblocks in separate Funktionen.Refactoring verschachtelte Funktionen mit Pfeilfunktionen

socketHandler = (io) => { 
    io.on('connection', (socket) => { 
    socket.on('doLogin', data => { 
     userService.getUserByName(data.uname) 
     .then((doc) =>{ 
      if(doc && doc.pwd===data.pwd){ 
      socket.emit('onLogin', {status:'SUCCESS'}); 
      } 
     }, (error) => { 
      socket.emit('onLogin', {status:'Error in the application'}); 
     }); 
    }); 
    }); 
} 

app.configure(socketio(socketHandler)); 

Ich habe versucht, den obigen Code wie folgt zu refactoring.

doLogin = data => { 
    userService.getUserByName(data.uname) 
    .then((doc) =>{ 
     if(doc && doc.pwd===data.pwd){ 
     socket.emit('onLogin', {status:'SUCCESS'}); 
     } 
    }, (error) => { 
     socket.emit('onLogin', {status:'Error in the application'}); 
    }); 
} 

socketHandler = (io) => { 
    io.on('connection', (socket) => { 
    socket.on('doLogin', doLogin); 
    }); 
} 

app.configure(socketio(socketHandler)); 

Ich bekomme einen Laufzeitfehler, da Socket nicht definiert ist.

Wie erhalten Sie einen Verweis auf "Socket" in der Funktion "doLogin"?

Ich habe auch den folgenden Weg versucht und konnte es nicht funktionieren.

doLogin = socket => data => { 

versuchte sich auch als

socket.on('doLogin', doLogin.bind(socket)); 

folgt bei der Festsetzung dieser etwas Hilfe benötigen.

Danke.

Antwort

2

Nachdem Sie die Funktionen abgebrochen haben, haben Sie den Bezug auf socket Objekt verloren. Sie könnten versuchen, in Socket

socket.on('doLogin', (data) => doLogin(data, socket)); 

und neu zu definieren doLogin als

doLogin = (data, socket) => { 
0

doLogin.bind(socket) funktioniert nicht, wenn doLogin Pfeil Funktion ist, weil Pfeil Funktionen nicht gebunden werden können. Stattdessen sollte es eine normale Funktion sein:

function doLogin(data) { 
    const socket = this; 
    ... 
} 
... 
socket.on('doLogin', doLogin.bind(socket)); 
Verwandte Themen