在继续之前,我的应用程序如何在Firebase中等待Cloud Functions的写入执行?

时间:2019-08-01 00:21:52

标签: firebase google-cloud-firestore firebase-authentication google-cloud-functions

我有一个云功能,一旦有新用户注册,它就会在数据库中创建我的自定义用户对象。 同时,在应用程序本身中,注册用户后,他们将转移到主页。

问题在于,主页(关键)中第一个执行的功能正在获取用户对象,因为应用程序中的任何操作都需要它。 但是,因为在cloud函数创建该用户对象之前打开的页面,所以当主页中的函数尝试获取该对象时,它尚不存在。

其结果是,一旦用户几乎单击任何内容,它们就会被发送回注册页面。 注册活动会识别出它们实际上已登录,然后将其发送回主页,这时一切都将随着对象的创建而起作用,但是用户的体验并不理想,感觉就像是一个错误。

如何防止这种情况?我可以在注册活动中实现的最简单的操作是什么,它将在将用户发送到主页之前等待云功能发出的有关对象已创建的信号?

1 个答案:

答案 0 :(得分:2)

您可以使用DocumentReference onSnapshot或与您的客户端平台等效的任何方法,指示您的应用程序监听希望创建的文档。明显的要求是您的应用程序知道该函数将要创建的文档的确切路径。在您的情况下,听起来客户端可以根据Firebase身份验证分配的用户UID知道。

如果您的应用无法识别该功能预期创建的文档,则该功能将必须告知客户端。如果是HTTP类型的函数,则客户端应在响应中接收此文档ID。如果它不是HTTP类型的函数,那么您将需要找到另一种方式来通知客户端它正在等待什么。

无论如何,创建文档时将触发onSnapshot回调,您可以使用它来确定何时允许用户继续。完成后,您当然应该从该DocumentReference中删除侦听器。