更新刚刚创建的协作地图条目

时间:2016-05-31 18:38:09

标签: google-drive-api google-drive-realtime-api collaborative-editing google-realtime-api

我有一个图形编辑器,用户可以选择创建节点。它与所有当前选定的节点连接。在谷歌文档中,它看起来像一个节点(其字符串标签)映射到逗号分隔的连接标签集。因此,要添加节点,我首先要创建一个空的地图项

map.set(name, "");

然后,单独添加连接的项目

if (map.get(a) == null) throw new Error("node " + a + " does not exist") // fails here
if (map.get(b) == null) throw new Error("node " + b + " does not exist")
map.set(a, a_connections)
map.set(b, b_connections)

问题是map.get检测到该节点尚未添加到地图中。这需要一些时间。即使在单个JS客户端(read-my-writes inconsistent)内,操作似乎也是非阻塞的。我该怎么办呢?

当我尝试建立两个连接时,我注意到这种不一致(只是为了检测连接何时失败,因为连接丢失并且我的所有编辑都没有传播到服务器而我希望用户知道这一点)

1 个答案:

答案 0 :(得分:0)

page包含有关冲突解决方案的一些详细信息以及您可以执行的操作,以便将更改一起应用。

我对你的例子有点困惑,问题/预期的行为是什么。

如果你在同一个客户端上执行map.set(" foo",""),然后执行map.get(" foo")相同的同步块get将始终返回您设置的内容。

如果您是从不同的同步块执行此操作,但是在同一客户端上,只有当另一个客户端更改了" foo"的值时,get才会返回不同的内容。

如果你正在做套装并进入不同的客户,那么" foo"可以花费任意的时间来传播给其他客户端。您应该能够注册一个侦听器以发现它何时被设置。

如果您想跟踪所有更改的持续时间,您可以收听DocumentSaveStateChangedEvents