我有一个Cloud Function,可以在用户使用FirebaseAuth(使用电子邮件和密码)注册后立即在Firestore中创建用户个人资料。
用户文档可能如下所示
users/{<uid>}
{
username:"smith",
status: "I love pineapple pizza",
email:"smith@mail.com"
}
注册后,我为我的用户提供了更改其status
属性的机会。问题在于用户可能比触发的云功能更快。这导致用户尝试更改 不存在的文档的问题。
如何确定云功能已被触发? 我唯一想到的就是从客户端检查文档是否存在(可能是循环)。 imo这不是一个很好的方法。
答案 0 :(得分:3)
您可以attach a listener to the document。这样,onSnapshot
应该会在创建文档时触发,此时您可以对其进行更新。
根据客户机和服务器需要执行的确切写入,还应考虑使写入成为幂等。因此:确保谁先行,所有写操作都会成功。
答案 1 :(得分:1)
检查文档是否已存在是您唯一的方法。您确实无法保证客户端和服务器之间将如何精确交互。如果您需要在客户端上执行某些操作,则它必须与服务器进行协调,而无需考虑何时确切触发云功能。
如果您希望某个函数在Firestore中创建文档时触发某些客户端代码,只需在该文档上设置侦听器即可(不要使用get()-它应该是侦听器)。创建文档时将触发该侦听器,并且您可以确保该功能是完整的