firebase - 我的应用程序如何在继续之前等待 Firebase 中的 Cloud Functions 执行写入操作?
问题描述
我有一个云功能,一旦新用户注册,它就会在数据库中创建我的自定义用户对象。同时在应用程序本身,用户注册后,他们会被转移到主页面。
问题是,主页(关键)中第一个执行的功能是获取用户对象,因为应用程序中的任何操作都需要它。但是因为在云函数之前打开的页面已经创建了这个用户对象,所以当主页面中的函数尝试获取该对象时,它还不存在。
这样做的结果是,只要用户几乎点击任何内容,他们就会被发送回注册页面。注册活动识别出他们实际上已登录,将他们发送回主页面,此时一切都会在对象创建后正常工作,但用户体验不是很好,感觉像是一个错误。
我怎样才能防止这种情况?我可以在我的注册活动中实现的最简单的事情是什么,在将用户发送到主页之前等待来自云函数的一些信号表明对象已创建?
解决方案
您可以使用 DocumentReference onSnapshot或任何与您的客户端平台等效的东西来指示您的应用程序侦听它期望创建的文档。显而易见的要求是您的应用程序知道该函数将要创建的文档的确切路径。在您的情况下,听起来客户端可以根据 Firebase 身份验证分配的用户 UID 知道。
如果您的应用程序无法识别预期由该函数创建的文档,则该函数将不得不告诉客户端。如果它是一个 HTTP 类型的函数,客户端应该在响应中收到这个文档 ID。如果它不是 HTTP 类型的函数,那么您需要找到另一种方法来通知客户端它正在等待什么。
无论如何,onSnapshot 回调将在创建文档时触发,您可以使用它来确定何时允许用户继续。完成后,您当然应该从该 DocumentReference 中删除侦听器。
推荐阅读
- apache-spark - 在 pyspark 中执行大规模可并行化的任务
- excel - 如何按功能选择单元格
- nuxt.js - vue 路由操作。(#)
- r - 在 R 中使用 hisgest 值的 colname 添加新列
- oracle-apex - Oracle APEX 使用页面项值显示自定义警报消息
- sql - 使用 R 将数据插入 Vertica 表 (SQL)?
- javascript - javascript数字对于模来说太大了
- oracle - Oracle APEX - 为 POPUP LOV 设置 Null 显示值
- sql - Postgres SELECT Where 子句有条件地应用存储过程中的参数,当它们不为空时
- javascript - 查找在字符串中添加和删除了哪些单词,包括重复项