等待Firebase云触发器功能结束,然后再启动http请求

时间:2019-12-05 16:28:14

标签: firebase google-cloud-functions

问题

我有一个前端用户注册页面。用户单击“注册”后,将在我的Firestore数据库中创建用户文档。我做了一个'onCreate'触发函数,它监听正在创建的新用户文档。此触发功能会创建和更新数据库中的其他文档(它会添加额外的信息,并根据刚创建的用户文档创建一些文档)。

一旦用户在前端单击“注册”,他们就会被重定向到新页面。在新页面的initState上,它发出一个http(云函数)请求,该请求需要由我的触发函数创建的这个新创建的信息才能正确做出他的响应。问题是,此HTTP请求在触发函数结束之前启动,这导致HTTP函数出错,因为它无法找到所需的信息,因为触发函数尚未结束并且尚未完全更新数据库

有人知道如何解决此问题吗?我做的第一件事,只是一个非常丑陋和快速的解决方法,是在onclick“注册”之后,在前端延迟了几秒钟,从而延迟了重定向到新页面的时间,并且因此延迟了http请求。但这只是一个临时解决方案。我想现在有一个真正的解决方案。有没有办法告诉HTTP请求在此特定的触发功能运行时不运行?或者,如果不可能,是否有另一种方法来构建功能或前端架构来防止这种情况?我已经考虑过了,并试图研究有相同问题的人,但是我对此没有任何疑问。 (这让我有些害怕,因为这让我觉得自己缺少一些基本知识。)

如果可以的话,请先谢谢。

1 个答案:

答案 0 :(得分:1)

我在这里听到的是您的比赛条件很经典。我了解您的用户单击“注册”,这会导致将新文档添加到数据库中。然后在该插入上有一个触发器,该触发器将更新其他文档/字段。在这里,您已经介绍了并行性,因此引入了种族。

您的设计需要进行更改,以便在异步执行的更新完成后从GCP发送回“信号”。由于浏览器不会收到不请自来的信号,因此您必须设计一个解决方案,在其中浏览器回叫GCP,这样在异步更改完成之前,调用不会返回。一种方法可能是不具有onCreate触发器,而是让浏览器在初始插入后显式调用Cloud Function来执行更新(甚至是自行执行插入的Cloud Function)。在数据一致并且可以被浏览器读取之前,Cloud Function不应返回。