Firestore поток документов и обновления - PullRequest
0 голосов
/ 19 февраля 2020

В init моего приложения я регистрирую поток для одного из документов, хранящихся в firestore. Позже я обновляю поле метки времени в том же документе. Я должен получить один обратный вызов из потока, поскольку существует только 1 обновление.

Однако я получаю 2 обратных вызова -

  1. Где это обновленное поле равно нулю
  2. Где это обновленное поле имеет правильное обновленное значение

Есть идеи почему?

 CollectionReference collectionReference = FIRESTORE.collection("users");
 if(streamSub == null) {
  streamSub = collectionReference.document(documentID).snapshots().listen((onData){
    onData.data.forEach((k,v) => debugPrint(k + " = " + v.toString()));
  });
 }

//Update field
Firestore.instance
    .collection("users")
    .document(documentID)
    .updateData({"Time" : FieldValue.serverTimestamp() })

1 Ответ

2 голосов
/ 19 февраля 2020

Вы получаете два обратных вызова из-за использования FieldValue.serverTimestamp(). Это значение на самом деле является токеном, который отправляется на серверы Firestore, где метка времени определяется и, наконец, записывается в базу данных. Локально на клиенте, значение не известно во время записи, однако запись документа все еще происходит в локальном кэше.

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

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