В настоящее время я запускаю проект Angular с Firebase в качестве серверного бэкэнда. В приложении есть две основные модели user
и product
. Обе эти модели имеют несколько разных временных отметок, таких как createdAt
, updatedAt
, lastPurchase
, ...
interface User {
id: string;
displayName: string;
lastPurchase?: Date;
createdAt: Date;
updatedAt?: Date;
}
interface Product{
id: string;
title: string;
pricing: number;
category: string;
user: User;
createdAt: Date;
updatedAt?: Date;
}
Проблема в том, что я работаю с Date
типа, но Firebase доставляет сохраненные даты, подобные этой t {seconds: 1584540876, nanoseconds: 300000000}
. Поэтому я вынужден конвертировать все входящие временные метки Firebase в типы JavaScript Date
. Кроме того, поскольку Firebase's Firestore является базой данных № SQL, я никогда не могу быть уверен, какой документ содержит какие свойства отметки времени (для нулевых проверок).
Это текущий рабочий код, который я использую при получении данных из Пожарная мастерская, но это довольно беспорядок.
// Iterate over all properties in product
for (let key in data) {
// Check if property is an object
if (data[key] instanceof Object) {
// Check if the object is Firebase Timestamp
if (data[key].constructor.name === 't') {
const property: string = key;
console.log(data[key]);
data[key] = data[property].toDate();
// Check if property is an user
} else if (key === 'user') {
// Iterate over all user properties
for (let userKey in data[key]) {
// Check if user property is an object and the object is Firebase Timestamp
if (data[key][userKey] instanceof Object && data[key][userKey].constructor.name === 't') {
const userProperty: string = userKey;
data[key][userKey] = data[key][userProperty].toDate();
}
}
}
}
}
Есть ли альтернативное решение / метод для достижения этого с меньшими затратами вычислений?