问题描述
在我的 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。