Ответ 1
В случае сети и node.js SDK вызов onSnapshot
возвращает функцию, которую вам нужно сохранить в переменной, и вызовите, когда вы хотите удалить слушателя.
var unsubscribe = db.collection("cities").onSnapshot(function (querySnaphot) {
// do something with the data.
});
// Stop listening to changes
unsubscribe();
Другие SDK предлагают аналогичную функциональность.
См. https://firebase.google.com/docs/firestore/query-data/listen#detach_a_listener для справки.