Lau*_*ens 6 typescript rethinkdb horizon angular
我有一个MeetingService,通过HorizonIO从我的RethinkDB中获取数据.当尝试通过其ID获取会议时,我将始终获得null值作为响应.此服务中的其他方法无问题.
meeting.service.ts:
getMeetingById(passedId: string): Observable<Meeting[]> {
return this.table.find({meetingId: passedId}).fetch();
}
Run Code Online (Sandbox Code Playgroud)
会议-detail.component.ts:
currentMeeting: Meeting;
getCurrentMeeting(): void {
this._meetingsService.getMeetingById(this.passedId).subscribe(
(returnMeetings: Meeting[]) => {
this.currentMeeting = returnMeetings[0];
}
);
}
Run Code Online (Sandbox Code Playgroud)
即使我将passId更改为我直接从我的数据库(通过管理面板)获取的ID,该方法仍然返回null.
如果我更改代码以返回表中的第一个值,一切都会起作用.
getMeetingById(passedId: string): Observable<Meeting[]> {
return this.table.order("meetingId", "descending").limit(1).fetch();
}
Run Code Online (Sandbox Code Playgroud)
最终结果是在我的视图中currentMeeting var上未定义错误:
EXCEPTION: Error in ./MeetingDetailComponent class MeetingDetailComponent - inline template:1:4 caused by:
Cannot read property 'meetingId' of undefined
Run Code Online (Sandbox Code Playgroud)
编辑:显示不同实现的附加代码:
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];
}
);
}
}
Run Code Online (Sandbox Code Playgroud)
第二个工作,第一个不工作.传递的ID是正确的,并且在数据库中也可用,因此这非常令人困惑.
提前致谢.
尽管似乎没有人关心这个问题,但我找到了一个相对有效的答案。我的临时修复涉及获取整个表并通过每个表手动查找正确的 id,但也可以这样:
使用 find() 和 lambda 来调用正确的 id。
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));
}
Run Code Online (Sandbox Code Playgroud)