невозможно удалить слушателя из события изменения в потоке изменений mongodb - PullRequest
0 голосов
/ 26 марта 2019

Я подумал, что поток изменений mongodb расширяет класс EventEmitter , поэтому я попытался удалить события, которые я установил, с помощью функции removeListener.После вызова removeListener в потоке изменений он все еще срабатывает при изменении.Может быть, я просто использую неправильную ссылку на функцию при удалении, но не могу понять, как.

Я обнаружил, что removeAllListeners действительно удаляет подключенный прослушиватель.Но мне нужно контролировать, какого слушателя удалить.

const change_listener = (change) => {
    console.log(change_stream.listenerCount("change"))
    change_stream.removeListener("change", change_listener)
    console.log(change_stream.listenerCount("change"))
}
change_stream.on("change", change => change_listener(change))

должен выдавать 1 0

, но выводит 1 1

и слушатель продолжает слушать.

Использование .once вместо .on помогает только на полпути.Мне все еще нужно было бы удалить removeListener, потому что я должен иметь возможность отменить слушателя рано.

1 Ответ

1 голос
/ 27 марта 2019

Проблема связана с функцией, которую вы удаляете.

Это должно работать:

const change_listener = (change) => {
    console.log(change_stream.listenerCount("change"))
    change_stream.removeListener("change", change_listener)
    console.log(change_stream.listenerCount("change"))
}
change_stream.on("change", change_listener)

Обратите внимание, что change => change_listener(change) - это функция, которая отличается от change_listener

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