首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在写入Firestore时,我如何知道所有触发器都已完成?

在写入Firestore时,我如何知道所有触发器都已完成?
EN

Stack Overflow用户
提问于 2021-02-24 15:01:06
回答 1查看 14关注 0票数 0

背景:我使用Firestore作为我的(web)应用程序的主数据库。我还预先呈现了存储在其中的数据,这基本上意味着我收集了特定请求所需的所有数据,以便稍后可以在单个读取访问中获取它们,并将预先呈现的数据存储在一个单独的Firestore集合中。

当用户更改某些数据时,我想知道后台渲染何时完成,这样我就可以显示更新后的数据。在渲染完成之前,我想要显示一个加载指示器(“微调器”),这样用户就知道他当前看到的是过时的数据。

到目前为止,我计划让应用程序将更改的数据写入数据库,并使用云函数将更改的数据传播到预先呈现的数据集合。这带来了一个问题,因为编写应用程序只知道原始写访问何时完成,而不知道重新呈现何时完成,因此它不知道何时更新其视图。我可以挂接到渲染视图的表中,以便在渲染完成时获得更新,但如果没有明显的更改,该回调将不会被通知,因此我仍然不知道何时删除微调器。

我的第二个想法是让渲染器函数发布到pubsub主题,但这失败了,因为如果用户的请求碰巧保持原始数据不变,则不会调用onUpdate/渲染器,因此不会在pubsub上发布任何内容,并且客户端也不知道何时删除微调器。

在这两种情况下,理论上我都可以首先获取数据并查看是否有什么变化,但我觉得这太容易引入细微的bug。

我的最后一个想法是不允许直接写入数据库,而是通过云函数执行所有写入操作,也就是说,更像是一个经典的后端。然后,这些函数可以运行渲染器,并仅在渲染器完成时发送响应(或发布到pubsub)。但这有两个新的问题:首先,这些函数对整个数据库有完全的写访问权限,我又回到了像传统后端一样手动检查用户权限的方式,不能利用Firestore的权限规则。其次,在这种方法中,渲染器不会像onUpdate那样自动获取之前/之后的快照,所以我又回到了更新之前获取每个记录的位置,这样渲染器就知道发生了什么变化,并且不会重新渲染数据库中实际上没有受到任何影响的大量部分。

理想情况下,(我认为)我需要的是(1)一种知道对数据库的写访问何时完成(包括onUpdate触发器)的方法,或者(2)一种让onUpdate调用写访问而不实际更改数据库的方法(所有更新的字段都被更新为它们已经包含的值)。

有没有办法在Firestore /云函数中做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-24 15:38:09

您可以在呈现的文档中增加一个计数器,这样,即使“有意义的”字段没有变化,字段也总是会发生变化

为此,最好的方法是使用FieldValue.increment

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66346093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档