每当将新事件添加到群组的所有订户时,我都试图将一些数据保存到该群组的所有订户。看来可行,但是以某种方式,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
});
}
})
在图像上,您会看到对于单个事件它可以按预期运行,但是在组事件中它仅保存标题。 有人知道导致问题的原因吗?我究竟做错了什么?预先非常感谢您的帮助!
答案 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);
});