首页 > 解决方案 > 如何使用 RxFire 检查是否已在 Firestore 中创建文档

问题描述

在我的 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 中,我会得到“未定义”,如果有的话,我会得到“未定义”,但我希望上面的示例能够以类似的方式工作。

标签: javascriptgoogle-cloud-firestorerxfire

解决方案


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

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

此外,相同的创建/写入操作将在中间调用更新


推荐阅读