Можно ли заменить приемник событий данных сокета Node.js? - PullRequest
0 голосов
/ 01 октября 2019

Я использую пакет Node.js net для подключения и связи с сервером Telnet. Я использую net.createConnection() для создания и инициализации сокета;затем выполнить что-то вроде следующего, чтобы связать начальный прослушиватель событий данных:

client.on('data', (data) => { this.handleFoo(data) });

Я подумал, что было бы неплохо инкапсулировать различные функции в разные обратные вызовы;один для обработки переговоров о соединении, входе в систему и т. д. Один для связи общего назначения.

Я попытался просто позвонить .on() еще раз, чтобы посмотреть, смогу ли я заменить обратный вызов приемника событий чем-то, что не имеет всего кода подключения / входа:

client.on('data', (data) => { this.handleBar(data) });

К сожалению, это не дало эффекта, и исходный обратный вызов снова вызывался. Возможно ли это сделать?

Я не смог найти другой метод сокета, который бы отменял регистрацию первого обратного вызова слушателя.

Спасибо.

1 Ответ

1 голос
/ 01 октября 2019

Вам нужна именованная функция. Используйте client.removeListener() или client.off(), доступные с Node.js v10.0.0. Они доступны для net.Socket, поскольку оно распространяется на EventEmitter.

const fooHandler = (data) => { this.handleFoo(data) };

client.on('data', fooHandler);
...
client.off('data', fooHandler);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...