Установка и получение метки времени сервера в Firestore - PullRequest
0 голосов
/ 27 ноября 2018

Я регистрирую пользователя с помощью аутентификации Firebase, а затем сохраняю данные пользователя в коллекции / users в Firestore из приложения React / Redux.Я включил поле createAt , которое сохраняет метку времени сервера Firestore, чтобы определить, когда был создан пользователь.Вызов .set выглядит следующим образом:

try {
let newUser = {
  displayName,
  createdAt: firestore.FieldValue.serverTimestamp(),
  showWizard: true,
  role: "client",
  status: "signedUp",
  schoolName,
  quiz,
  email
};
await firestore.set(`users/${currentUser.uid}`, {
  ...newUser
});
 } catch (err) {
  dispatch(asyncActionError());
  toastr.error("Something went wrong", err.message);
  throw new SubmissionError({
    _error: err.message
 });
}

Затем я хочу получить этот пользовательский документ для отправки аналитических данных в сегмент, включая метку времени.Вызов для извлечения данных и запуска действия сегмента Redux выглядит следующим образом:

try {
const newUserDoc = await firestore.get(`users/${currentUser.uid}`);
const newUserRecord = {
  id: newUserDoc.id,
  ...newUserDoc.data()
};
console.log(newUserRecord);

dispatch({
  type: USER_SIGN_UP,
  meta: {
    analytics: [
      {
        eventType: EventTypes.identify,
        eventPayload: {
          userId: newUserRecord.id,
          traits: {
            email: newUserRecord.email,
            createdAt: newUserRecord.createdAt.toDate().toISOString(),
            displayName: newUserRecord.displayName,
            quiz: newUserRecord.quiz,
            schoolName: newUserRecord.schoolName,
            role: newUserRecord.role
          }
        }
      },
      {
        eventType: EventTypes.track,
        eventPayload: {
          event: "User Signed Up",
          properties: {
            category: "Admin",
            label: newUserRecord.quiz
          }
        }
      }
    ]
  }
});
dispatch(asyncActionFinish());
return newUserRecord;
} catch (error) {
  dispatch(asyncActionError());
  toastr.error("Something went wrong", error.message);
  throw new SubmissionError({
    _error: error.message
  });
}

Документ пользователя отображается без ошибок, но поле creationAt отображается как ноль.Когда я проверяю консоль Firebase через мгновение, поле createAt заполняется правильной датой.

Кажется, что создание временной метки сервера не завершено к тому времени, когда я получаю документ.Как я могу убедиться, что получение документа будет включать правильную метку времени?

Спасибо за вашу помощь!

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