首页 > 解决方案 > 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 方法混淆,并且客户端会不同步。

我希望我说清楚了。我只需要一个正确的方向来修复这个并发写入到同一个节点。

任何帮助表示赞赏。谢谢

标签: javascriptangularjsfirebaseionic-frameworkfirebase-realtime-database

解决方案


评论越来越长,但这似乎是您问题的有效解决方案只需推送另一个节点,并让您的侦听器返回最后推送的节点

而不是使用 child_changed,而是使用 child_added


推荐阅读