Обновление только что созданных записей совместной карты
У меня есть редактор графиков, где у пользователя есть возможность создать узел. Связывается со всеми выбранными в данный момент узлами. В документе 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