首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >虚拟钱包的固定幂等性

虚拟钱包的固定幂等性
EN

Stack Overflow用户
提问于 2019-02-21 15:02:48
回答 1查看 211关注 0票数 0

我再来找你们帮忙。我有一个应用程序,你可以用你的信用卡补充你自己的虚拟钱包。

我的结构是作为追随者:

  • 集合transactions/{transactionId} --包含所有者UID和加法金额。
  • 包含users/{userId}/personal/wallet{ funds: 0 }集合

我把钱包放在一个personal信息的子集合中,因为我不想让其他用户看到它。

无论如何,我有一个onCreate触发器,名为walletSync,用于transactions集合下的新文档,从该触发器中获取金额,并通过runTransaction将其添加到用户的当前资金中。

问题是,这个函数有时会触发三次.一份文件。这是截图。我已经记录了transactionId (这只是一个文档),正如您所看到的,onCreate正在被处理三次,因此,用实际值的三倍在我的钱包上。

下面是我的函数代码,在该代码中,我将使用processed: true标记任何已处理的事务,以便下次触发时可以忽略它。正如您在日志中看到的那样,processed_already消息永远不会弹出,这意味着触发器将不会在下次触发时获取新数据。

我在这里没有想法了,请告诉我。

编辑:这是我的功能:https://pastebin.com/PRA7CbxL

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-21 17:32:30

在强大的道格和提到的类似问题的帮助下,我设法想出了答案。

毕竟,我的代码的问题是,当我将事务标记为processed时,我假设第二次/第三次函数触发时,snapshot.data()将是文档的值(我花了一些时间才意识到),它实际上是发送到数据库触发器的change数据。我知道这听起来很混乱,但是函数并没有被发送到文档的值(为此,您可以从其中获取snapshot.ref并从中获取数据,以便在事务中获得更新的值)。

下面是我在巴斯丁上更新的函数。下面是代码的屏幕截图:https://i.imgur.com/fbQSGT6.png

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

https://stackoverflow.com/questions/54810129

复制
相关文章

相似问题

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