我在将以下代码块重构为单独的函数时遇到了麻烦。
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));
我尝试将上面的代码重构如下。
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));
由于未定义套接字,我收到运行时错误。
如何在函数“doLogin”中获取对“socket”的引用?
我也尝试了以下方法,但无法实现。
doLogin = socket => data => {
还尝试如下
socket.on('doLogin', doLogin.bind(socket));
需要一些帮助来解决这个问题。
谢谢。
最佳答案
分解函数后,您失去了对 socket
对象的引用。你可以尝试,在 SocketHandler
socket.on('doLogin', (data) => doLogin(data, socket));
并将doLogin
重新定义为
doLogin = (data, socket) => {
关于javascript - 使用箭头函数重构嵌套函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45391961/