【发布时间】:2018-03-15 01:58:47
【问题描述】:
我有一个由 Firestore 数据库写入触发的云功能。它执行可能需要很长时间的异步操作(从某些 3rd 方 API 获取数据),也可能不会。完成后,它将结果写入“搜索结果”字段。
可能存在竞争条件,即来自较新触发器的结果被稍后完成的较旧操作覆盖。我应该如何在 Firebase 云函数和 Firestore 的上下文中解决这个问题?
【问题讨论】:
-
如果您知道在第二次(或第三次或第四次)Firestore 文档写入期间当前正在发生对第三方服务的请求,您打算怎么做?
-
取消它,如果没有忽略并取消订阅。
-
取消旧请求,我的意思是。不取消新的数据库写入。
-
函数的两次调用彼此一无所知。它们甚至可能不在同一个服务器实例上运行。如果没有一些相当深入的工作来尝试在两者之间建立一些通信,一个调用不会影响另一个调用,可能使用 Firestore 本身。
-
通常,您会通过确保操作是幂等的来做到这一点,这意味着多次执行相同的操作是无用的。但是,如何做到这一点取决于您的具体用例。
标签: firebase google-cloud-functions google-cloud-firestore