【发布时间】:2021-02-16 22:56:36
【问题描述】:
在我的 React 应用程序中,我想在更新我的 UI 之前检查后台 firebase 函数是否已在 Firestore 中创建了文档。因此,我使用 RxFire 中的 docData 函数来订阅特定的“即将从背景函数创建”文档中的更改:
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。这实际上是有效的,因为如果文档没有存储在 Firestore 中,我会得到“未定义”,如果有,则会得到“David”,但我希望上面的示例能够以类似的方式工作。
【问题讨论】:
-
在我看来,您在使用“名称”字段时解决了这个问题。有意义的是,“uid”字段永远不会更新,因为它是对文档的引用。
-
谢谢@Juancki,是的,这似乎解决了我的用例,但我没想到它来自 mongodb。我习惯于通过取回 doc.uid 作为文档存在于数据库中的证据来检查文档是否存在。因此,如果我给 mongodb 提供了错误的参考,它不会返回我猜的参考。但这显然是一种不同的做事方式——我对 RxJS 和 firestore 还很陌生 :) 如果你添加你的评论作为答案,我会标记为接受任何其他困惑的人。
标签: javascript google-cloud-firestore rxfire