Попытка реализовать облачную функцию на firebase, но получить ошибку для неопределенной переменной - PullRequest
0 голосов
/ 17 марта 2020

У меня есть нижеприведенная функция, которую я реализовал и применил к своим облачным функциям в моем проекте Firebase, но после выполнения он вызывает ошибку в журнале функций консоли Firebase;

> TypeError: Cannot read property 'profileImgUrl' of undefined

Я понимаю смысл ошибки, которую она генерирует, но я не понимаю, почему моя переменная пользователя будет неопределенной

Вот функция ниже:

exports.eventInvites = functions.firestore
.document('Events/{eventId}').onCreate((snap, context) => {
  const eventData = snap.data();
  const eventId = context.params.eventId;
  const invitees = eventData.invitees;
  let user;
  db.doc(`Users/${eventData.createdBy}`).get().then(doc => {
    var data = doc.data();
    user = data; // updated user data but still get undefined
    return user;
  }).catch(error => {
    console.log(error.message);
  });
  if (invitees !== undefined || invitees.length > 0) {
    invitees.forEach(invitee => {
      db.collection('Users').doc(invitee).collection('feed').doc().set({
        date: new Date(),
        image: user.profileImgUrl, // error occurs here, says user is undefined
        summary: `${user.firstName} ${user.lastName} invited you to an event`,
        extraText: `${eventData.eventName}: ${eventData.eventDetails} `,
        extraImages: [
          eventData.eventImgUrl
        ]
      }).catch(error => {
        console.log(error.message)
      });
    });
  }
});

1 Ответ

0 голосов
/ 17 марта 2020

get() является асинхронным, поэтому код после его выполнения выполняется раньше. Чтобы решить эту проблему, вы можете поместить весь код внутри get():

db.doc(`Users/${eventData.createdBy}`).get().then(doc => {
    var data = doc.data();
    user = data;
    if (invitees !== undefined || invitees.length > 0) {
      invitees.forEach(invitee => {
        db.collection('Users').doc(invitee).collection('feed').doc().set({
          date: new Date(),
          image: user.profileImgUrl,
          summary: `${user.firstName} ${user.lastName} invited you to an event`,
          extraText: `${eventData.eventName}: ${eventData.eventDetails} `,
          extraImages: [
            eventData.eventImgUrl
          ]
        })
      });
    }
    return user;
  }).catch(error => {
    console.log(error.message);
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...