Firestore TimeStamp прошел через вызываемые функции - PullRequest
1 голос
/ 03 июня 2019

Я работаю над реагирующим веб-приложением, которое помогает в управлении проектами. Проблема, с которой я сталкиваюсь, связана с временными метками Firestore. Каждый объект проекта, хранящийся в Firestore, имеет поле createdOn, которое имеет тип Firestore timestamp. Мое веб-приложение вызывает вызываемую функцию firebase, которая получает все проекты и возвращает их. Проблема в том, что функция toDate() не работает в веб-приложении, но работает в функциях Firebase. Мне интересно, если проблема при преобразовании в JSON, что timeStamp теряет что-то. Я что-то упустил или я должен хранить их как-то? Я действительно не хочу преобразовывать все стороны сервера дат, поскольку это замедлит вызов функции. Я использую метку времени для фильтрации на стороне клиента и для аналитики.

Как я пишу отметку времени как часть объекта проекта: createdOn: admin.firestore.Timestamp.now(),

и в вызываемой функции я тестирую с этим: console.log(allProjects[0].createdOn!.toDate()) и это работает.

В моем веб-приложении я звоню по этому номеру data.createdOn.toDate() и получаю сообщение об ошибке TypeError: data.createdOn.toDate is not a function

Любая помощь будет оценена. спасибо,

Я использую на стороне функций

"firebase-admin": "^8.0.0",
"firebase-functions": "^2.3.1",

и на стороне клиента

"firebase": "^6.1.0",
"typescript": "^3.5.1"
"react": "^16.8.6",

1 Ответ

1 голос
/ 03 июня 2019

«Мне интересно, если проблема при преобразовании в JSON заключается в том, что timeStamp что-то теряет».

Да, что-то теряет.Временная метка будет сериализована таким образом, что ее поля секунд и наносекунд будут отправляться индивидуально.Вам придется воссоздать новый объект Timestamp из этих значений, полученных на клиенте.Поскольку вы не показываете очень специфический код, на самом деле невозможно дать больше информации.Я настоятельно рекомендую вам не просто зависеть от сериализации JSON по умолчанию для временной метки, а вместо этого специально читать и записывать поля секунд и наносекунд явным образом на обоих концах.

См. Также этот связанный вопрос для Java: Каксериализовать Firestore TimeStamp в Android Java?

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