Создание присутствия с помощью Firebase и Firestore, ошибка в развернутой функции: «секунды не являются допустимым целым числом» - PullRequest
0 голосов
/ 16 апреля 2020

Я использую этот документ , предоставленный Firebase, чтобы использовать комбинацию Firebase и Firestore для установления sh "присутствия" в Firestore с помощью встроенного присутствия Firebase с onDisconnect () . Большая часть кода дословно от того, что предоставляет Firebase, но я настроил несколько вещей для своей структуры данных. Я успешно развернул свою функцию (ниже) в Firebase. Проверяя журналы, я получаю эту ошибку:

Error: Value for argument "seconds" is not a valid integer.
    at Object.validateInteger (/srv/node_modules/@google-cloud/firestore/build/src/validate.js:191:19)
    at new Timestamp (/srv/node_modules/@google-cloud/firestore/build/src/timestamp.js:70:20)
    at Function.fromMillis (/srv/node_modules/@google-cloud/firestore/build/src/timestamp.js:126:16)
    at Function.fromDate (/srv/node_modules/@google-cloud/firestore/build/src/timestamp.js:108:26)
    at Serializer.encodeValue (/srv/node_modules/@google-cloud/firestore/build/src/serializer.js:97:53)
    at Serializer.encodeFields (/srv/node_modules/@google-cloud/firestore/build/src/serializer.js:56:30)
    at Function.fromObject (/srv/node_modules/@google-cloud/firestore/build/src/document.js:97:53)
    at op (/srv/node_modules/@google-cloud/firestore/build/src/write-batch.js:245:58)
    at writes._ops.map.op (/srv/node_modules/@google-cloud/firestore/build/src/write-batch.js:431:44)
    at Array.map (<anonymous>)

Так как я в основном использую код, предоставленный Firebase, я действительно не знаю, как это отладить. Я предполагаю, что это как-то связано со сравнением меток времени между Firebase и Firestore. Любой совет, где это может пойти не так?

const functions=require('firebase-functions');
const admin=require('firebase-admin');
admin.initializeApp();

const firestore=admin.firestore();

exports.onUserStatusChanged=functions.database.ref('user/{uid}').onUpdate(
    async (change, context) => {
        const eventStatus=change.after.val();
        const userStatusFirestoreRef=firestore.doc(`user/${context.params.uid}`);
        const statusSnapshot=await change.after.ref.once('value');
        const status=statusSnapshot.val();
        console.log(status, eventStatus);

        if (status.last_changed>eventStatus.last_changed){
            return null;
        }

        eventStatus.last_changed=new Date(eventStatus.last_changed);

        return userStatusFirestoreRef.set(eventStatus);
    }
);

1 Ответ

0 голосов
/ 17 апреля 2020

Решение состоит в том, что элементы last_changed должны были быть предварительно определены в объектах, на которые они ссылаются. В этом случае они отсутствовали, что приводило к ошибке.

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