Вам нужно будет сделать еще 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. Для стратегий для дублированных данных в актуальном состоянии см. Как записать денормализованные данные в Firebase .