如何使用 RxFire 检查文档是否已在 Firestore 中创建
How to check that a document has been created in Firestore with RxFire
在我的 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
问题是 userData.uid 总是 returns “david”,而不管在 Firestore 中创建的文档是什么。我究竟做错了什么?它似乎从我在参考中设置的路径返回 uid,而不是在 firestore 中创建(或应该创建)的实际文档路径。当我更改引用以查找“users/foo”时,userData.uid 仍然是 returns“foo”,而不是未定义或通过错误。
在这种情况下,我可以改为查找 userData.name。这实际上是有效的,因为如果文档没有存储在 Firestore 中,我会得到“undefined”,如果有,我会得到“David”,但我希望上面的例子以类似的方式工作。
“uid”字段的值不会更改,因为它是对文档的引用。
要确认文档已创建,您应该监听其他字段的变化,例如名称,正如您在问题中提到的那样。
此外,相同的 creation/write 操作 will invoke intermediately the updates。
在我的 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
问题是 userData.uid 总是 returns “david”,而不管在 Firestore 中创建的文档是什么。我究竟做错了什么?它似乎从我在参考中设置的路径返回 uid,而不是在 firestore 中创建(或应该创建)的实际文档路径。当我更改引用以查找“users/foo”时,userData.uid 仍然是 returns“foo”,而不是未定义或通过错误。
在这种情况下,我可以改为查找 userData.name。这实际上是有效的,因为如果文档没有存储在 Firestore 中,我会得到“undefined”,如果有,我会得到“David”,但我希望上面的例子以类似的方式工作。
“uid”字段的值不会更改,因为它是对文档的引用。
要确认文档已创建,您应该监听其他字段的变化,例如名称,正如您在问题中提到的那样。
此外,相同的 creation/write 操作 will invoke intermediately the updates。