Firebase Functions устанавливает только первое значение в базе данных Firebase Realtime. - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь сохранить некоторые данные всем подписчикам группы всякий раз, когда в их группу добавляется новое событие. Кажется, это работает, но каким-то образом функции Firebase сохраняют только первое значение в моей базе данных Firebase в реальном времени.

Как вы видите в моем коде, я делаю это внутри forEach, а также без forEach. В зависимости от того, одно событие или групповое событие. За пределами forEach он работает отлично, и все данные сохраняются. Однако внутри forEach он сохраняет только «заголовок». В console.log () он показывает все правильные значения в консоли функций firebase, но все равно не отображается в базе данных реального времени.

 exports.saveNewEventToUsers = functions.database.ref('events/{groupId}/{eventId}').onCreate((snap, context) => {
  const root = snap.ref.root;
  // removed some consts for this example
  // if the groupId equals the creator it's a single-event ELSE a group-event
  if (groupId === data.creator) {
    singleEvent = true;
    return root.child(`userEvents/${groupId}/${eventId}`).set({ title, timestamp, singleEvent, creator, eventId, groupId });
  } else {
    return root.child(`groups/${groupId}/selected`).once('value', snapshot => {
      snapshot.forEach(user => {
        console.log(title, timestamp, singleEvent, creator, eventId, groupId);
        return root.child(`userEvents/${user.key}/${eventId}`).set({ title, timestamp, creator, eventId, groupId });
      }); // forEach
    });
  }
})

Here you see the single event and group event difference. It should always be like on the single event The logs also show up right

На изображении вы видите, что для одиночных событий он работает как положено, но для групповых событий он только сохраняет заголовок. Кто-нибудь есть идеи, что вызывает проблему? Что я делаю неправильно? Заранее большое спасибо за помощь!

1 Ответ

1 голос
/ 11 июля 2019

Вы смешиваете обратные вызовы и обещания, поэтому функция завершается раньше, чем вы ожидаете. Попробуйте что-то вроде:

    return root.child(`groups/${groupId}/selected`).once('value').then(snapshot => {
      const sets = [];
      snapshot.forEach(user => {
        console.log(title, timestamp, singleEvent, creator, eventId, groupId);
        sets.push(root.child(`userEvents/${user.key}/${eventId}`).set({ title, timestamp, creator, eventId, groupId }));
      }); // forEach
      return Promise.all(sets);
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...