我再来找你们帮忙。我有一个应用程序,你可以用你的信用卡补充你自己的虚拟钱包。
我的结构是作为追随者:
transactions/{transactionId} --包含所有者UID和加法金额。users/{userId}/personal/wallet的{ funds: 0 }集合我把钱包放在一个personal信息的子集合中,因为我不想让其他用户看到它。
无论如何,我有一个onCreate触发器,名为walletSync,用于transactions集合下的新文档,从该触发器中获取金额,并通过runTransaction将其添加到用户的当前资金中。
问题是,这个函数有时会触发三次.一份文件。这是截图。我已经记录了transactionId (这只是一个文档),正如您所看到的,onCreate正在被处理三次,因此,用实际值的三倍在我的钱包上。
下面是我的函数代码,在该代码中,我将使用processed: true标记任何已处理的事务,以便下次触发时可以忽略它。正如您在日志中看到的那样,processed_already消息永远不会弹出,这意味着触发器将不会在下次触发时获取新数据。
我在这里没有想法了,请告诉我。
编辑:这是我的功能:https://pastebin.com/PRA7CbxL

发布于 2019-02-21 17:32:30
在强大的道格和提到的类似问题的帮助下,我设法想出了答案。
毕竟,我的代码的问题是,当我将事务标记为processed时,我假设第二次/第三次函数触发时,snapshot.data()将是文档的值(我花了一些时间才意识到),它实际上是发送到数据库触发器的change数据。我知道这听起来很混乱,但是函数并没有被发送到文档的值(为此,您可以从其中获取snapshot.ref并从中获取数据,以便在事务中获得更新的值)。
下面是我在巴斯丁上更新的函数。下面是代码的屏幕截图:https://i.imgur.com/fbQSGT6.png
https://stackoverflow.com/questions/54810129
复制相似问题