Почему batch.commit () не работает, пока не будет вызван WriteResult? - PullRequest
0 голосов
/ 21 сентября 2019

У меня есть база данных Firestore, куда я записываю данные в WriteBatch().Так что я столкнулся со странным поведением при совершении изменений.Мои данные обновляются или устанавливаются, только если я что-то делаю с переменной batch.commit() Код должен объяснить мою проблему лучше:

...
...
Firestore db = FirestoreClient.getFirestore();       

Map<String, Foo> test = new HashMap<>();
test.put("Entry1", new Foo("Bar1", 5));
test.put("Entry2", new Foo("Bar2", 7));

WriteBatch batch = db.batch();
DocumentReference ref;

for (String key : test.keySet()) {
    ref = db.collection("foo").document(key);
    batch.set(ref, test.get(key), SetOptions.mergeFields("var1", "var2"));
}

// if I just call batch.commit() here data will not be overwritten on a change of i.e "Entry1"

// but if I call the next 2 lines everything is working as intended
ApiFuture<List<WriteResult>> result = batch.commit();
result.get();

У меня нет проблем с добавлением этих строк в мой код, но япытаюсь понять, почему это происходит.

1 Ответ

3 голосов
/ 22 сентября 2019

Согласно вашему комментарию:

Последние 2 строки кода в моем примере.Если они отсутствуют, изменения не будут записаны в пожарный.Как я понимаю, это не имеет значения, если я сохраню возвращаемое значение batch.commit () или нет.

Если эти две строки кода отсутствуют, точнее то, что с commit(),ничего не произойдет, так как вы ничего не делаете для своей партии.И да, вы правы, не имеет значения, сохраняете ли вы результат batch.commit() в объект result или нет, метод commit() всегда будет вызываться для этого объекта.Таким образом, пакет будет записан в Firestore, только когда вы вызовете commit() для объекта пакета, в противном случае строки кода, которые существуют ранее, бесполезны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...