Tengo un MeetingService que obtiene datos de mi RethinkDB a través de HorizonIO. Cuando intento obtener una reunión a través de su ID, siempre obtengo un valor nulo como respuesta. Otros métodos en este servicio funcionan sin problemas.
servicio.de.reunión.ts:
getMeetingById(passedId: string): Observable<Meeting[]> { return this.table.find({meetingId: passedId}).fetch(); }reunión-detalle.component.ts:
currentMeeting: Meeting; getCurrentMeeting(): void { this._meetingsService.getMeetingById(this.passedId).subscribe( (returnMeetings: Meeting[]) => { this.currentMeeting = returnMeetings[0]; } ); }Incluso cuando cambio passId a una ID que obtuve directamente de mi base de datos (a través del panel de administración), el método aún devuelve nulo.
Si cambio el código para que devuelva el primer valor de la tabla, todo simplemente funcionará.
getMeetingById(passedId: string): Observable<Meeting[]> { return this.table.order("meetingId", "descending").limit(1).fetch(); }El resultado final es un error indefinido en la variable currentMeeting en mi opinión:
EXCEPTION: Error in ./MeetingDetailComponent class MeetingDetailComponent - inline template:1:4 caused by: Cannot read property 'meetingId' of undefinedEditar: código adicional que muestra las diferentes implementaciones:
load() { if(this.passedId != null) { this._feedService.GetFeedById(this.passedId).subscribe( (returnFeed: Feed[]) => { this.currentFeed = returnFeed[0]; } ); } else { this._feedService.GetFirstFeed().subscribe( (returnFeed: Feed[]) => { this.currentFeed = returnFeed[0]; } ); } }El segundo funciona, el primero no. La identificación pasada es correcta y también está disponible en la base de datos, por lo que esto es bastante confuso.
Gracias por adelantado.
Aunque a nadie parece importarle la pregunta, encontré una respuesta que funciona relativamente bien. Mi solución temporal implicó obtener la tabla completa y encontrar manualmente la identificación correcta a través de un para cada uno, pero también es posible así:
Use find() y una lambda para llamar a la identificación correcta.
getMeetingById(passedId: string): Observable<IMeeting> { var allMeetings: Observable<Meeting[]>; allMeetings = this.table.watch(); return allMeetings.flatMap((meetings: IMeeting[]) => Observable.from(meetings)) .find((meeting: IMeeting) => (meeting.id == passedId)); }