Обновление только что созданных записей совместной карты

У меня есть редактор графиков, где у пользователя есть возможность создать узел. Связывается со всеми выбранными в данный момент узлами. В документе Google это выглядит так, как будто узел (его строковая метка) сопоставлен с разделенным запятыми набором связанных меток. Итак, чтобы добавить узел, я сначала создаю пустой элемент карты

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-клиента ( чтение-моя-запись несовместима). Как я должен работать с этим?

Я заметил это несоответствие, когда пытался установить два соединения (просто для того, чтобы определить, когда соединения разорваны, потому что может случиться, что соединение потеряно, и все мои правки не распространяются на сервер, и я хотел, чтобы пользователь знал об этом).

1 ответ

На этой странице есть некоторые сведения о разрешении конфликтов и о том, что вы можете сделать, чтобы ваши изменения применялись вместе.

Я немного запутался из вашего примера, в чем проблема / ожидаемое поведение.

Если вы выполняете map.set ("foo", ""), а затем map.get ("foo") на том же клиенте из одного и того же синхронного блока, get всегда будет возвращать то, что вы установили.

Если вы делаете это из разных синхронных блоков, но на одном и том же клиенте, get вернет что-то другое, только если другой клиент внес изменение в значение "foo".

Если вы выполняете набор и подключаетесь к разным клиентам, то значение "foo" может занять произвольное время для передачи другому клиенту. Вы должны быть в состоянии зарегистрировать слушателя, чтобы узнать, когда он установлен.

Если вы хотите отслеживать, когда все изменения были сохранены, вы можете прослушать DocumentSaveStateChangedEvents