Получить поле метки времени из снимка в виде метки времени внутри триггеров облачных функций - PullRequest
0 голосов
/ 04 февраля 2019

В машинописном тексте я могу создать документ с полем, таким как созданный, обновленный как метка времени, используя change.after.updateTime или snap.createTime внутри триггеров облачных функций.

Но внутри других триггеров, таких как onUpdate, поле change.after.data().updatedAt, который предполагает хранить метку времени, дает мне объект.

Как я могу сравнить их, если я не могу получить их в качестве значения метки времени?Как я могу получить поле в качестве значения Timestamp?Спасибо

admin.initializeApp();
const firestore = admin.firestore();
const settings = { timestampsInSnapshots: true };
firestore.settings(settings);


export const setCreatedAt = functions.firestore.document('path')
    .onCreate(async (snap, context) => {

        return snap.ref.update({
            createdAt: snap.createTime, // Type Timestamp
            updatedAt: snap.createTime // Type Timestamp
        });

    });

export const setUpdatedAt = functions.firestore.document('path')
    .onUpdate(async (change, context) => {

        let beforeTimestamp = change.before.data().updatedAt; // Type object, not Timestamp
        let afterTimestamp = change.after.data().updatedAt; // Type object, not Timestamp

        console.log('beforeTimestamp', beforeTimestamp);
        console.log('afterTimestamp', afterTimestamp);

        if (change.before.data().updatedAt === change.after.data().updatedAt) {
            change.after.ref.update({
                updatedAt: change.after.updateTime, // Type Timestamp
            });
        }
    });

На рисунке ниже показаны журналы при выполнении обновления.Example

Похоже, настройки { timestampsInSnapshots: true } не действуют, потому что у меня все еще есть предупреждение внутри консоли.Но почему?

Поведение объектов Date, хранящихся в Firestore, изменится, и ваше приложение может сломаться

1 Ответ

0 голосов
/ 20 февраля 2019

Вам необходимо преобразовать возвращенные объекты Timestamp в объекты Date:

beforeTimestamp.toDate()

Затем вы можете сравнить объекты Date с < and > операторами.Если вам нужно сравнить на равенство, то вам сначала нужно преобразовать даты в числа: beforeTimestamp.toDate().getTime()

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