Я начинаю изучать angular, и я создал проект angular, где у меня есть база данных пожарного депо, структурированная как:
users:
--docs:
--uid:String;
--tickets:String[];<--this are the ticketid
tickets:
--ticketid:
--Eventid:String;
Events:
--Eventid:
--City:String;
--Title:String;
...
, где пользователи, билеты и События являются коллекциями, и документы, ticketid и eventid являются документами, содержащими информацию.
Я хочу получить объект Event из базы данных:
Это код, который я пробовал до сих пор:
getEvents(){
return this.db.collection('users').doc(this.useruid).snapshotChanges().pipe(map(tickets=>{
var data = tickets.payload.data() as usuario;
this.arrayTickets = data.tickets;
this.arrayTickets.forEach(element => {
this.db.collection('tickets').doc(element).snapshotChanges().pipe(map(ticket=>{
var eventId = ticket.payload.get('eventid');
this.db.collection('events').doc(eventoId).snapshotChanges().pipe(map(event=>{
var element = event.payload.data() as event;
this.events.push(element);
}))
}))
});
return(this.events);
}))
}
, где this.events:event[]
. Я думаю, что это не работает, потому что это асинхронно. Я попробовал другой способ, убрав моментальные снимки, чтобы они не обновлялись постоянно:
return this.db.firestore.collection('usuarios').doc(this.useruid).get().then(snapshot =>{
var data = snapshot.data() as usuario;
var eventosid: string[]=[];
data.tickets.forEach(element => {
this.db.firestore.collection('tickets').doc(element).get().then(snapshot=>{
var data2 = snapshot.data() as ticket;
eventosid.push(data2.eventoid);
})
});
return eventosid;
, но это не работает ... Большое спасибо за ваше внимание.