javascript - 使用箭头函数重构嵌套函数

标签 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){
            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/

相关文章:

javascript - 无法设置属性innerHTML错误

javascript - 删除运算符在 Javascript 中不起作用

python - 长字典属性行的重构

java - 如何轻松地将配置存储在常量中?

javascript - 日期未在数据库中保存正确的值

javascript - JQuery 数据表标题下方的附加滚动条

javascript - 是否有任何干净的方法可以使用可变键初始化对象?

javascript - 如何制作与 await 一起使用但也可以接受回调的函数?

javascript - 重构简单的 jQuery 切换选择器

Javascript 代码性能分析工具