socket.io анонимный обратный вызов: не может вызывать функции класса - PullRequest
0 голосов
/ 16 сентября 2018

Итак, у меня есть следующий фрагмент кода:

class Server {
  dataHandler(d) {
    console.log(d);
  }
  init() {
    io.on('connection', function(socket) {
      socket.on('data', this.dataHandler(d); //<-- TypeError: this.dataHandler is not a function
    });
  }
}

Я хочу обработать данные сокета данных, но как я могу выйти из среды анонимных функций и получить доступ к this.dataHandler ()?Даже когда я вызываю dataHandler () или instance.dataHandler () (объект, который хранит сервер), он не может найти эту функцию.

Может кто-нибудь объяснить мне это?

1 Ответ

0 голосов
/ 16 сентября 2018

Это происходит из-за неправильного использования this.

. Вы должны использовать функцию стрелки, которая сохранит контекст this:

class Server {
  dataHandler(d) {
    console.log(d);
  }
  init() {
    io.on('connection', (socket) => {
      socket.on('data', this.dataHandler(d));
    });
  }
}
...