Функции Javascript в Firebase - PullRequest
       4

Функции Javascript в Firebase

0 голосов
/ 20 сентября 2018

Получение следующей ошибки:

"Невозможно прочитать свойство 'userName' из неопределенного в Promise.all.then.result"

Также возникает ошибка

"Поведение для объектов Date, хранящихся в Firestore, изменится, и ваше приложение может сломаться. Чтобы скрыть это предупреждение и убедиться, что ваше приложение не сломалось, необходимо добавить следующий код в свое приложение перед вызовом любогодругие методы Cloud Firestore:

 const firestore = new Firestore();
  const settings = {/* your settings... */ timestampsInSnapshots: true};
  firestore.settings(settings);

С этим изменением временные метки, хранящиеся в Cloud Firestore, будут считываться как объекты Firebase Timestamp, а не как объекты Date, поэтому вам также потребуется обновить код, ожидающий, что Dateвместо этого ожидайте отметку времени. Например:

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

Пожалуйста, проверяйте все существующие использования даты при включении нового поведения. В будущем выпуске поведение изменится на новое поведение, так что если вы этого не сделаетеследуйте этим шагам, ваше приложение может сломаться ".

Однако в моем андроид-проекте место, где я определил переменную «Date», у меня помещено «@ServerTimestamp» сверху.

Благодарю парней за помощь.

Код:

/*eslint-disable */

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

    exports.sendNotification = functions.firestore.document('notifications/{userEmail}/userNotifications/{notificationId}').onWrite((change, context) => {
const userEmail = context.params.userEmail;
const notificationId = context.params.notificationId;

    return admin.firestore().collection("notifications").doc(userEmail).collection("userNotifications").doc(notificationId).get().then(queryResult => {
        const senderUserEmail = queryResult.data().senderUserEmail;
        const notificationMessage = queryResult.data().notificationMessage;

        const fromUser = admin.firestore().collection("users").doc(senderUserEmail).get();
        const toUser = admin.firestore().collection("users").doc(userEmail).get();

        return Promise.all([fromUser, toUser]).then(result => {
            const fromUserName = result[0].data().userName;
            const toUserName = result[1].data().userName;
            const tokenId = result[1].data().tokenId;

            const notificationContent = {
                notification: {
                    title: fromUserName + " is shopping",
                    body: notificationMessage,
                    icon: "default"
                }
            };

            return admin.messaging().sendToDevice(tokenId, notificationContent).then(result => {
                console.log("Notification sent!");
                //admin.firestore().collection("notifications").doc(userEmail).collection("userNotifications").doc(notificationId).delete();
            });
        });
    });
});

1 Ответ

0 голосов
/ 20 сентября 2018

Убедитесь, что запрашиваемый вами документ действительно существует. data () вернет неопределенное значение, если это не так.Вы можете использовать свойство существующие в результирующем DataSnapshot, чтобы проверить, был ли документ действительно найден.

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