javascript - Firebase 避免多个客户端(网络)覆盖/更新相同的节点
问题描述
我正在使用 firebase 制作结帐系统,其中同一商店的多个用户可以同时覆盖/更新一个节点。
场景/步骤:
User1:在系统中输入商品代码(可以输入多个)
User2:在系统中输入项目代码(//)
用户 3:从系统中释放该项目代码
User4 ...等等。
代码:
"-KhBgsi8HwT5BloV0Srt" : {
"lastUpdated" : 1504285854767,
"methodName" : "ITEM_ENTERED",
"payLoad": "{'Id':1, 'ItemName': 'Apples'}"
}
在上面的代码中,每当任何用户输入时,我都会用 methodeName 和 payLoad 覆盖上面的节点。并且每当用户从系统中释放项目时,我都会通过这样的覆盖再次更新相同的节点:
"-KhBgsi8HwT5BloV0Srt" : {
"lastUpdated" : 1504285854767,
"methodName" : "ITEM_RELEASED",
"payLoad": "{'Id':1, 'ItemName': 'Apples'}"
}
所有用户都连接到同一个firebase节点,可以同时被上述用户覆盖。因此,如果所有用户同时进行操作,则节点将获得节点中保存的最后一个。我怎样才能避免这种情况并确保所有用户都获得相同的数据,而不是节点上发生的最后一个数据。
在某些时候,当用户快速完成所有事情时,上面的节点会与 ITEM_ENTERED/ITEM_RELEASED 方法混淆,并且客户端会不同步。
我希望我说清楚了。我只需要一个正确的方向来修复这个并发写入到同一个节点。
任何帮助表示赞赏。谢谢
解决方案
评论越来越长,但这似乎是您问题的有效解决方案只需推送另一个节点,并让您的侦听器返回最后推送的节点
而不是使用 child_changed,而是使用 child_added
推荐阅读
- hive - 如何总结 Hive 中的计数
- c++ - 检查变体在编译时是否具有价值
- python - Keras 2.4 的 AssertionError
- python - 使用 QRegExpValidator 的 QLineEdit 意外行为
- c - 如何保护数据部分?
- json - 让 convertTo-Json 返回所需格式时遇到问题
- java - 用户从下拉菜单更改数据库时如何阻止文本字段?
- go - 如果特定测试失败,则退出测试套件,但运行其他测试套件
- java - 排除 Lombok @Data 自带的 toString 方法生成
- javascript - 为什么 onchange 在 React 和 HTML 上的行为不同