在 RethinkDB 中通过 HorizonIO 查找记录不返回结果
Find record through HorizonIO in RethinkDB not returning result
我有一个通过 HorizonIO 从我的 RethinkDB 获取数据的 MeetingService。当尝试通过其 ID 获取会议时,我总是会得到一个空值作为响应。此服务中的其他方法可以正常工作。
meeting.service.ts:
getMeetingById(passedId: string): Observable<Meeting[]> {
return this.table.find({meetingId: passedId}).fetch();
}
meeting-detail.component.ts:
currentMeeting: Meeting;
getCurrentMeeting(): void {
this._meetingsService.getMeetingById(this.passedId).subscribe(
(returnMeetings: Meeting[]) => {
this.currentMeeting = returnMeetings[0];
}
);
}
即使我将 passedId 更改为直接从我的数据库(通过管理面板)获得的 ID,该方法仍然 returns null。
如果我将代码更改为 return table 中的第一个值,一切都会正常工作。
getMeetingById(passedId: string): Observable<Meeting[]> {
return this.table.order("meetingId", "descending").limit(1).fetch();
}
在我看来,最终结果是 currentMeeting 变量未定义错误:
EXCEPTION: Error in ./MeetingDetailComponent class MeetingDetailComponent - inline template:1:4 caused by:
Cannot read property 'meetingId' of undefined
编辑:显示不同实现的附加代码:
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];
}
);
}
}
第二个有效,第一个无效。传递的 id 是正确的,并且在数据库中也可用,所以这很令人困惑。
提前致谢。
虽然似乎没有人关心这个问题,但我找到了一个相对有效的答案。我的临时修复涉及获取整个 table 并通过 a for each 手动找到正确的 ID,但也可以像这样:
- 创建一个变量,该变量是您需要的 table 的可观察变量(通过 .watch())
- 调用 flatMap() 并获取可观察数组(如果有人知道为什么需要这样做,请告诉我)
使用 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));
}
我有一个通过 HorizonIO 从我的 RethinkDB 获取数据的 MeetingService。当尝试通过其 ID 获取会议时,我总是会得到一个空值作为响应。此服务中的其他方法可以正常工作。
meeting.service.ts:
getMeetingById(passedId: string): Observable<Meeting[]> {
return this.table.find({meetingId: passedId}).fetch();
}
meeting-detail.component.ts:
currentMeeting: Meeting;
getCurrentMeeting(): void {
this._meetingsService.getMeetingById(this.passedId).subscribe(
(returnMeetings: Meeting[]) => {
this.currentMeeting = returnMeetings[0];
}
);
}
即使我将 passedId 更改为直接从我的数据库(通过管理面板)获得的 ID,该方法仍然 returns null。
如果我将代码更改为 return table 中的第一个值,一切都会正常工作。
getMeetingById(passedId: string): Observable<Meeting[]> {
return this.table.order("meetingId", "descending").limit(1).fetch();
}
在我看来,最终结果是 currentMeeting 变量未定义错误:
EXCEPTION: Error in ./MeetingDetailComponent class MeetingDetailComponent - inline template:1:4 caused by:
Cannot read property 'meetingId' of undefined
编辑:显示不同实现的附加代码:
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];
}
);
}
}
第二个有效,第一个无效。传递的 id 是正确的,并且在数据库中也可用,所以这很令人困惑。
提前致谢。
虽然似乎没有人关心这个问题,但我找到了一个相对有效的答案。我的临时修复涉及获取整个 table 并通过 a for each 手动找到正确的 ID,但也可以像这样:
- 创建一个变量,该变量是您需要的 table 的可观察变量(通过 .watch())
- 调用 flatMap() 并获取可观察数组(如果有人知道为什么需要这样做,请告诉我)
使用 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)); }