Отмена привязки событий в Node.js - PullRequest
22 голосов
/ 29 ноября 2010

Давайте возьмем stdin.on в качестве примера.Обратные вызовы в стек stdin.on, поэтому, если я напишу (в CoffeeScript)

stdin = process.openStdin()
stdin.setEncoding 'utf8'
stdin.on 'data', (input) -> console.log 'One'
stdin.on 'data', (input) -> console.log 'Two'

, то каждый раз, когда я нажимаю клавишу возврата в ответ на запрос, я получаю

One
Two

Мой вопрос:Есть ли способ удалить / заменить обратный вызов после привязки?Или это единственный способ связать прокси-вызов и управлять состоянием самостоятельно?

Ответы [ 2 ]

34 голосов
/ 29 ноября 2010

Вы можете использовать removeListener(eventType, callback) для удаления события, которое должно работать со всеми видами излучателей.

Пример из документации API:

var callback = function(stream) {
  console.log('someone connected!');
};
server.on('connection', callback);
// ...
server.removeListener('connection', callback);

Таким образом, вам нужна переменная, которая содержит ссылку на обратный вызов, потому что в противном случае невозможно определить, какой обратный вызов вы хотите удалить.

EDIT
Должен быть кто-то вроде этого в CS:

stdin = process.openStdin()
stdin.setEncoding 'utf8'

logger = (input) -> console.log 'One'
stdin.on 'data', logger
stdin.removeListener 'data', logger

stdin.on 'data', (input) -> console.log 'Two'

См .: http://nodejs.org/docs/latest/api/events.html#emitter.removeListener

16 голосов
/ 11 мая 2012

Или вы можете использовать:

stdin.once вместо stdin.on

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...