Javascript 使用箭头函数重构嵌套函数
我很难将下面的代码块重构成单独的函数Javascript 使用箭头函数重构嵌套函数,javascript,ecmascript-6,refactoring,Javascript,Ecmascript 6,Refactoring,我很难将下面的代码块重构成单独的函数 socketHandler = (io) => { io.on('connection', (socket) => { socket.on('doLogin', data => { userService.getUserByName(data.uname) .then((doc) =>{ if(doc && doc.pwd===data.pwd){
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
对象的引用。你可以试试,在索克德勒
socket.on('doLogin', (data) => doLogin(data, socket));
并将doLogin
重新定义为
doLogin = (data, socket) => {
分解函数后,您失去了对
socket
对象的引用。你可以试试,在索克德勒
socket.on('doLogin', (data) => doLogin(data, socket));
并将doLogin
重新定义为
doLogin = (data, socket) => {
doLogin.bind(socket)
如果doLogin
是arrow函数,则绑定(socket)将不起作用,因为无法绑定arrow函数。相反,它应该是一个常规函数:
function doLogin(data) {
const socket = this;
...
}
...
socket.on('doLogin', doLogin.bind(socket));
doLogin.bind(socket)
如果doLogin
是arrow函数,则绑定(socket)将不起作用,因为无法绑定arrow函数。相反,它应该是一个常规函数:
function doLogin(data) {
const socket = this;
...
}
...
socket.on('doLogin', doLogin.bind(socket));