【发布时间】:2019-06-21 04:50:17
【问题描述】:
我正在使用 firebase 制作结帐系统,同一商店的多个用户可以同时覆盖/更新一个节点。
场景/步骤:
User1:在系统中输入商品代码(可以输入多个)
User2:在系统中输入商品代码(//)
User3:从系统中释放该项目代码
User4 ... 等等。
代码:
"-KhBgsi8HwT5BloV0Srt" : {
"lastUpdated" : 1504285854767,
"methodName" : "ITEM_ENTERED",
"payLoad": "{'Id':1, 'ItemName': 'Apples'}"
}
在上面的代码中,每当任何用户输入时,我都会用方法名称和项目的 payLoad 覆盖上面的节点。并且每当用户从系统中释放项目时,我都会通过这样的覆盖再次更新同一节点:
"-KhBgsi8HwT5BloV0Srt" : {
"lastUpdated" : 1504285854767,
"methodName" : "ITEM_RELEASED",
"payLoad": "{'Id':1, 'ItemName': 'Apples'}"
}
所有用户都连接到同一个 Firebase 节点,可以同时被上述用户覆盖。因此,如果所有用户同时进行操作,则节点将获得节点中保存的最后一个。我怎样才能避免这种情况并确保所有用户都获得相同的数据,而不是节点上发生的最后一个数据。
在某些时候,当用户快速完成所有事情时,上面的节点会与 ITEM_ENTERED/ITEM_RELEASED 方法混淆,并且客户端会不同步。
我希望我的观点很清楚。我只需要一个正确的方向来修复这个并发写入到同一个节点。
感谢任何帮助。 谢谢
【问题讨论】:
-
但是你的问题没有详细说明如果两个用户写入同一个节点,应该应用哪个更新
-
每个用户在写入上述节点时都会更新上述 firebase 节点的有效负载/方法名/lastupdated。
-
@Mocas 我想确保所有连接的设备都接收到每个动作/节点更新数据而不会跳过。
-
那么宁愿保留一个节点,让每个人都更新,只需推送另一个节点
-
@Mocas 如果我推送另一个节点,我如何确保所有用户都看到最新数据。读取所有 json 节点而不仅仅是一个?对吗?
标签: javascript angularjs firebase ionic-framework firebase-realtime-database