我正在尝试请求获取用户的所有事件,然后在列表中获取此事件的详细信息。我找不到合适的解决方案。
因此,目前,我仅获得用户的旅行信息,而没有获得用户所进行的每个事件的详细信息。
谢谢您的帮助
答案 0 :(得分:0)
您将需要为当前回调中的每个事件执行另外一个on()
或once()
,并加载其他数据。此过程称为客户端连接。然后,在内部循环中,您可以在每次加载时或在全部加载时分派结果。
代码(未经测试,因此可能有错别字):
usersRef.child(uid).child("events").on("value", snapshot => {
var promises = []
snapshot.forEach(eventSnapshot => {
promises.push(eventsRef.child(eventSnapshot.key).once("value"));
})
Promise.all(promises).then(eventSnapshots => {
// eventSnapshots contains the details of all events
return eventSnapshot.map(eventSnapshot => eventSnapshot.val());
}).then(events => {
dispatch({ type: FETCH_EVENTS, payload: events });
});
})
或者,您可以在/ users / $ uid / events / $ eventid`下复制每个事件的最少数据。这将复制数据,但避免了客户端联接的需要。在使用NoSQL数据库时,这种读与写的权衡是很常见的。有关最新数据复制的策略,请参见How to write denormalized data in Firebase。