He creado 3 tablas en firebase console. Evento, ocurrencia y lugar. Ahora un evento puede tener múltiples ocurrencias, ya que las ocurrencias son básicamente espectáculos.
En el documento de ocurrencia, tengo un evento establecido como referencia y un lugar establecido como referencia.
Consulto firebase a través de la ocurrencia para obtener todos los programas más recientes.
Quiero crear una matriz de objetos javascript en reaccionar que tendrán identificación, fecha (proviene de la ocurrencia), título (proviene del evento) y dirección (proviene del lugar).
const [events, setEvents] = useState<any[]>([]); useEffect(() => { const subscribe = firestore() .collection('occurrences') .onSnapshot(querySnapshot => { const showList: any[] = []; querySnapshot.forEach(documentSnapshot => { const { startDate, event, venue } = documentSnapshot.data(); const show: any = { id: documentSnapshot.id, date: startDate, }; event.onSnapshot( eventsDocSS => { show.title = eventsDocSS.get('name'); }, error => console.error('my error', error) ); venue.onSnapshot( eventsDocSS => { show.address = eventsDocSS.get('addressLocality') + ', ' + eventsDocSS.get('addressRegion'); }, error => console.error('my error', error) ); showList.push(show); }); setEvents(showList); }); return subscribe() },[])
Tenga en cuenta que este código no funciona, ya que necesitaría ejecutar el evento y las instantáneas del lugar de forma asíncrona para que funcione. Pero si lo hago asíncrono, lo tengo en cascada hasta el final al menos en el bucle forEach, lo que no funciona porque la suscripción no puede ser asíncrona.
Estoy usando @react-native-firebase/firestore
pero el código no debería ser tan diferente en la sintaxis.
¿Cómo puedo completar setEvents con los datos correctos?