Как запустить что-то только один раз после получения коллекции Firestore?

#javascript #firebase #google-cloud-firestore

# #javascript #firebase #google-облако-firestore

Вопрос:

У меня следующий запрос:

 firestore()
  .collection('users')
  .doc(userId)
  .onSnapshot(doc => setUser(doc.data()))
  .once(() => {
    // Do some things just once here!
  });
 

Мне нужно setUser , чтобы функция запускалась каждый раз при изменении данных коллекции, поэтому я настроил прослушиватель моментальных снимков, и он отлично работает.

Но once это не так. Мне нужно, чтобы вещи внутри этой функции выполнялись только один раз (при первом запуске запроса и никогда больше. У меня неправильный метод? Есть ли встроенный метод или какой-либо другой способ в Firestore для этого?

Ответ №1:

Это не рабочий процесс, поддерживаемый SDK. Вам просто нужно написать некоторый код, чтобы выразить это:

 let first = true
firestore()
  .collection('users')
  .doc(userId)
  .onSnapshot(doc => {
    setUser(doc.data());
    if (first) {
      first = false;
      // Do some things just once here!
    }
  })
 

Комментарии:

1. Бах, я надеялся избежать установки флагов, но, думаю, встроенного способа нет..

2. Вы можете выполнить либо один ответ, get() либо прослушать onSnapshot() , но не оба в одном. Вы всегда можете отправить запрос функции с поддержкой Firebase, но я не видел, чтобы это появлялось у кого-либо вообще с момента запуска Firestore.