С недавнего времени Firestore возвращает метки времени не как объекты Date, а как объекты Timestamp. То есть после каждого запроса вы должны делать что-то вроде этого:

// Old:
const date = snapshot.get('created_at');
// New:
const timestamp = snapshot.get('created_at');
const date = timestamp.toDate();

У меня есть объекты с несколькими сохраненными в них метками времени, и я вынужден преобразовывать каждую из этих меток по отдельности, прежде чем я смогу что-либо сделать с моим объектом. Сейчас я делаю следующее:

let user = // get user from firestore

user.created = user.created.toDate()
user.lastUpdated = user.lastUpdated.toDate()
user.foo.foo.foo.foo.fooDate1 = user.foo.foo.foo.foo.fooDate1.toDate()
user.foo.foo.foo.fooDate1 = user.foo.foo.foo.fooDate1.toDate()
...
user.foo.fooDate99 = user.foo.fooDate99.toDate()

Есть ли способ обойти это?

Я должен сделать это со всеми моими документами, даже если мне не нужно преобразовывать временные метки, поскольку различные зависимости (например, девальвация) прерываются с ошибками "Non-POJO", когда в моем объекте есть необработанные временные метки firestore.

Есть ли возможность напрямую преобразовать все временные метки документа в обычные объекты Date, или это единственный вариант вручную?

0
Pascal 4 Окт 2018 в 20:16

1 ответ

Лучший ответ

Нет простой опции, которую вы можете переключить, чтобы это произошло.

Если вы не хотите изменять их все вручную, вы можете написать код для рекурсивного перехода по всем свойствам всех ваших объектов, проверьте, какие из них выглядят как Timestamp (например, у него есть функция toDate), и если это так, выполните преобразование.

0
Doug Stevenson 4 Окт 2018 в 18:17