Firebase函数document.create和user.create触发多次触发

时间:2019-09-06 20:48:05

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

我试图跟踪集合中的文档数量以及Firebase项目中的用户数量。我设置了一些.create触发器以使用增量来更新统计文档,但有时.create函数会为单个创建事件触发多次。 Firestore文档和新用户都会发生这种情况。有什么想法吗?

!

谢谢!

2 个答案:

答案 0 :(得分:0)

您应该期望每个事件可能多次执行后台触发器。这应该非常罕见,但并非不可能。这是Cloud Functions为您提供“至少一次执行”的保证的一部分。由于内部基础结构相对于在专用服务器实例上执行代码而言是完全异步的,因此该基础结构可能不会收到信号,表明您的功能已成功完成。在这种情况下,它将再次触发该功能以确保交付。

如果对您的应用程序很重要,建议您将函数编写为幂等,以处理这种情况。正确实现这并不总是一件很简单的事情,并且可能还会增加代码的负担。对于不同类型的场景,也有很多方法可以做到这一点。但是选择是您的。

documentation for execution guarantees中详细了解它。

答案 1 :(得分:0)

对于如何实现功能的幂等,有一些建议。

FieldValue.arrayUnion()FieldValue.arrayRemove()函数可以安全地将元素删除并添加到数组中,如果删除的元素不存在,则不会出现重复或错误。

您可以在文档中创建名为“用户”和“文档”的数组字段,并通过触发函数使用FieldValue.arrayUnion()在其中添加数据。通过这种方法,您可以通过获取usersdocs字段并在其上调用.size()来检索客户端的实际大小。