如何使用 RxFire 检查是否已在 Firestore 中创建文档

问题描述

在我的 React 应用程序中,我想在更新我的 UI 之前检查后台 Firebase 函数是否已在 Firestore 中创建了文档。所以我使用 RxFire 的 docData 函数订阅特定的“about-to-be-created-from-a-background-function”文档中的更改:

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

问题是无论在 Firestore 中创建的文档如何,userData.uid 始终返回“david”。我究竟做错了什么?它似乎从我在参考中设置的路径返回 uid,而不是在 firestore 中创建(或应该创建)的实际文档路径。当我更改引用以查找“users/foo”时,userData.uid 仍然返回“foo”而不是 undefined 或通过错误

在这种情况下,我可以改为查找 userData.name。如果文档没有存储在 Firestore 或“David”中(如果有),这实际上会起作用,因为我得到“未定义”,但我希望上面的示例以类似的方式工作。

解决方法

“uid”字段的值不会改变,因为它是对文档的引用。

要确认文档已创建,您应该听取其他字段的更改,例如名称,正如您在问题中已经提到的那样。

此外,相同的创建/写入操作 will invoke intermediately the updates

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...