【问题标题】:How to check that a document has been created in Firestore with RxFire如何使用 RxFire 检查是否已在 Firestore 中创建文档
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2019-05-26
    • 2021-07-22
    • 2019-09-24
    • 2021-11-25
    • 1970-01-01
    • 2021-12-29
    • 2020-11-27
    • 1970-01-01
    相关资源
    最近更新 更多