我正在尝试与Cloud Firestore一起使用的Firebase Cloud Functions设置调试一些奇怪的问题。我正在将一些数据写入Cloud Firestore,并在Cloud Functions中内置了一些触发器。当我查看日志时,似乎有时onCreate触发器在onUpdate触发器之后运行。
从documentation中我读到“与所有后台功能一样,不能保证事件顺序。”
因此,据我了解,这实际上可能发生吗?我只想确保这会在我的设置中发生很大的变化。
例如,如果在更新或创建文档时需要更新某些其他文档,那么如果更新未按正确顺序运行,如何确保写入最新数据。我通常使用来自change.after.data()的数据,但我能看到的唯一其他解决方案是每次都读取数据以确保拥有最新数据。
有两个问题:
感谢您的解释和帮助!
答案 0 :(得分:2)
文档已经说过:不能确定触发器的解决顺序。
处理此问题的最佳方法是确保所有操作都是幂等的。即多次执行相同的操作或以不同的顺序运行,将导致相同的结果。这是我个人更喜欢onWrite
,onCreate
等使用onUpdate
触发器的原因之一,因为它们使我更容易编写代码在所有情况下都执行相同的操作。
因此,在您的代码中,您将检查目标文档是否已存在。如果是这样,请阅读目标文档。如果不是,请创建对新文档的引用。接下来,您将检查目标文档是否包含所需的数据。如果可以,则什么也不做。如果没有,请根据源文档生成数据,然后将其写入Firestore。
答案 1 :(得分:0)
实时数据库和Firestore都可以使用时间戳记命令,以便在.create
或.update
出现时加盖时间戳。因此,您的云函数似乎可以查看时间戳以确定最新的值。
.firebase.database.ServerValue.TIMESTAMP;
.firebase.firestore.FieldValue.serverTimestamp()