Как проверить, что документ был создан в Firestore с помощью RxFire

В моем приложении React я хочу проверить, создала ли фоновая функция firebase документ в Firestore перед обновлением моего пользовательского интерфейса. Поэтому я использую функцию docData из RxFire, чтобы подписаться на изменения в конкретном документе «о том, что будет создано на основе фоновой функции»:

      const davidDocRef = db.doc('users/david');

// meantime, a firebase function creates "users/david" doc in the background 
// I am observing for changes to the firestore doc in my React Component:

useEffect(() => {
docData(davidDocRef,'uid').subscribe(userData => setUserId(userData.uid));
...

// I then check that orgId is not null by assuming that I will get back a doc.id after it has been created it in Firestore

Проблема в том, что userData.uid всегда возвращает «david» независимо от того, какой документ создается в Firestore. Что я делаю не так? Похоже, он возвращает uid из пути, который я указал в ссылке, вместо фактического пути к документу, который был (или должен был быть) создан в firestore. Когда я меняю ссылку на поиск «users/foo», тогда userData.uid по-прежнему возвращает «foo» вместо undefined или с ошибкой.

В этом случае я могу вместо этого искать userData.name. Это действительно работает, поскольку я получаю «undefined», если документ не был сохранен в Firestore, или «Дэвид», если он есть, но я ожидаю, что приведенный выше пример будет работать аналогичным образом.

1 ответ

Решение

Значение поля «uid» не изменится, так как это ссылка на документ.

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

Кроме того, те же операции создания / записи будут вызывать промежуточные обновления .

Другие вопросы по тегам