如何检查Firebase Stripe扩展是否已完成创建客户/用户文档



我正在使用Firebase Stripe扩展。

将用户添加到Firebase时,Stripe扩展使用云函数在Firestore数据存储中创建users文档。

在我的应用程序中,我有一个函数可以创建一个Firebase用户,然后尝试更新匹配的usersFirestore文档。

但有时云函数还没有完成创建users文档,它会返回以下错误:

No document to update: projects/APP_NAME/databases/(default)/documents/users/KHaY21FSUasdfOXFS123Kfge85VA3

为了解决这个问题,我使用了一个timeout,它在继续之前会暂停几秒钟。这不是一个理想的解决方案。

相反,我想知道Firebase Stripe扩展是否在继续之前完成了users文档的创建。

如何做到这一点?

这是我的应用程序功能:

export const useCreateUserWithEmailAndPasswordTask = () => {
const updateDocTask = useUpdateDocTask();
return useTask(function* (
signal,
email: string,
password: string,
firstName: string,
lastName: string,
) {
// Create the user in Firebase
// The Firebase Stripe extension will now use Cloud Functions to also create a 'users' doc with related user info
const userCredential: UserCredential = yield createUserWithEmailAndPassword(
auth,
email,
password
);
// Now I wait 3 seconds to make sure the 'users' doc is created before updating it.
// Without this timeout it will occasionally throw an error because updateDocTask is called before the 'users' doc is created
// Is there a better way of doing this?
yield timeout(3000);
const updateDoc: void = yield updateDocTask.perform(
'users',
userCredential.user.uid,
{
firstName: firstName,
lastName: lastName,
createdAt: timestamp,
}
);
return Promise.all([userCredential, updateDoc]);
});
};

您可以使用实时侦听器而不是setTimeout(),如下所示:

import { doc, onSnapshot } from "firebase/firestore";
const unsub = onSnapshot(doc(db, "users", "<USER_DOC_ID>"), (doc) => {
// This function triggers whenever the document is created/updated/deleted
console.log("Data: ", doc.data());
});

请检查doc.data()是否已经有数据,以防扩展在用户到达此页面之前添加了文档。

相关内容

  • 没有找到相关文章

最新更新