Firebase函数仅在Firebase实时数据库中设置第一个值

时间:2019-07-11 16:05:40

标签: javascript firebase firebase-realtime-database google-cloud-functions

每当将新事件添加到群组的所有订户时,我都试图将一些数据保存到该群组的所有订户。看来可行,但是以某种方式,firebase函数只能将第一个值保存在我的firebase实时数据库中。

就像您在我的代码中看到的那样,我正在forEach内执行此操作,并且也没有forEach。取决于是单事件还是组事件。在forEach之外,它可以完美工作,并且所有数据都已保存。但是在forEach内部,它仅保存“ title”。 在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 个答案:

答案 0 :(得分:1)

您混用了回调和Promise,因此该函数在您期望之前终止。尝试类似的东西:

    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);
    });