0

У меня есть редактор графов, где у пользователя есть возможность создать узел. Он подключается ко всем выбранным в данный момент узлам. В документе 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-клиенте (read-my-writes inconsistent). Как я должен работать с этим?

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

ответ

0

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

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

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

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

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

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

+0

Спасибо, я проверю его. Но я не понимаю, какой конфликт может произойти здесь. Другой клиент использовал только для прослушивания и очистки состояния 'грязный'. Я попробовал 'DocumentStateChangedEvent'. [Доступен только один пример] (https://momeet.world-telephone.com/download/iptv/android-sdk-linux/extras/google/google_play_services/samples/drive/playground/src/com/google/android/ gms/drive/sample/realtimeplayground/PlaygroundDocumentActivity.java) 'mRealtimeDocument.addDocumentSaveStateChangedListener (mSaveStateListener'. –

+0

Но запись журнала' mRealtimeDocument.addDocumentSaveStateChangedListener' не определена. Я могу получить 'doc.getModel(). getRoot()' из документа onFileLoad событие, но у этого документа нет addStateChangeListener. –

+0

Я предполагаю, что это связано с тем, что я использую один и тот же код для обоих клиентов в режиме реального времени. Не возникает такой несогласованности, когда я редактирую график на разных вкладках браузера, когда каждая веб-страница делает только одно подключение к документу. –

 Смежные вопросы

  • Нет связанных вопросов^_^