【发布时间】:2017-10-30 09:09:25
【问题描述】:
我有一个用户列表,他们每个人都可以发布事件并互相关注,当他们这样做时,数据库将生成一个带有userId 对象的feed 对象和他们可以看到的事件列表,就像这样:
Mo4JxyP4FCRtXYtNZAqs4EsLtTh2 和 tq3bugOm5pRE2PxpmllKzUhKjty1 是用户 ID,-KIMxxx: true 是事件帖子。
在一个单独的events 对象中,我将事件的详细信息存储在那里:
目前,我在 redux 中检索所有事件,如下所示:
export const eventsFetch = () => {
return (dispatch) => {
firebase.database().ref(`/events/`)
.on('value', snapshot => {
dispatch({ type: EVENTS_FETCH_SUCCESS, payload: snapshot.val() });
});
};
};
如何重写该方法,使其仅从用户 ID 下的事件 ID 列表中检索数据?我试着做
firebase.database().ref(`/feed/${this.auth.currentUser.uid}`)
先获取对象,然后使用Object.keys() 获取类似["eventId1", "eventId2"] 的数组,但现在我卡住了,不知道如何循环遍历所有对象
firebase.database().ref(`/events/${eventId}`)
并像上面显示的方法一样将所有数据一起发送...不确定我是否要使用.once('value),因为我想在用户取消关注/关注时更新事件列表。
奖金请求,如果可能的话,正如您在events/${eventId}/timeAsDate 中看到的那样,每个事件都有时间,我想隐藏/不检索过去的事件。
谢谢
更新 感谢弗兰克的回答,我终于可以使用以下代码:
export const eventsFetch = () => {
const { currentUser } = firebase.auth();
return (dispatch) => {
firebase.database().ref(`/feed/${currentUser.uid}`).on('value', snapshots => {
const values = snapshots.val() || {};
const entryIds = Object.keys(values);
const promises = entryIds.map(
eventId => firebase.database().ref(`/events/${eventId}`).once('value')
);
Promise.all(promises).then(results => {
results.forEach(result => {
values[result.key] = result.val();
});
dispatch({ type: EVENTS_FETCH_SUCCESS, payload: values });
});
});
};
};
【问题讨论】:
标签: javascript reactjs firebase firebase-realtime-database redux