Я подумал, что поток изменений 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, потому что я должен иметь возможность отменить слушателя рано.