RXJS 可观察到可观察
RXJS observable in observable
我制作了这段代码:
return this.projectService.oneById(id).pipe(mergeMap(project => {
if (!project) {
return [];
}
const stories = this.getStories(id);
return combineLatest(project.members.map(member => {
return this.userService.one(member.id).pipe(map(memberData => {
const assigned = stories.pipe(mergeMap(t => combineLatest(t.filter(task => {
if (task && task.assignee?.id === member.id) {
return {
...task,
id: task.id
};
}
}))));
return {
id: member.id,
name: memberData?.displayName ?? 'Unknown',
assigned
};
}));
}));
}));
但我遇到了问题,因为我的函数需要 return Observable<Type[]>
,但它目前正在 returning Observable<{ ...etc, object: Observable<Type[]> }
.
显然问题出在observable里面的observable。但是,我不确定在这种情况下如何解决这个问题。我已经在我当前的代码中解决了很多次这个问题,但是这个问题对我来说很难理解,因为无论我尝试什么都没有改变。
感谢您的提前帮助。
PS:确切的警告是这样的:
Type 'Observable<{ id: string; name: string; assigned: Observable<[UserStory | undefined]>; }[]>' is not assignable to type 'Observable<Member[]>'. Type '{ id: string; name: string; assigned: Observable<[UserStory | undefined]>; }[]' is not assignable to type 'Member[]'. Type '{ id: string; name: string; assigned: Observable<[UserStory | undefined]>; }' is not assignable to type 'Member'. Types of property 'assigned' are incompatible. Type 'Observable<[UserStory | undefined]>' is missing the following properties from type 'UserStory[]': length, pop, push, concat, and 25 more.
有一个地方你试图将一个可观察对象而不是数组作为对象字段。这段代码应该更好
return this.projectService.oneById(id).pipe(mergeMap(project => {
if (!project) {
return [];
}
const stories = this.getStories(id);
return combineLatest(project.members.map(member => {
return this.userService.one(member.id).pipe(map(memberData => {
const assigned$ = stories.pipe(mergeMap(t => combineLatest(t.filter(task => {
if (task && task.assignee?.id === member.id) {
return {
...task,
id: task.id
};
}
}))));
return assigned$.pipe(map(assigned => ({
id: member.id,
name: memberData?.displayName ?? 'Unknown',
assigned
})));
}));
}));
}));
我制作了这段代码:
return this.projectService.oneById(id).pipe(mergeMap(project => {
if (!project) {
return [];
}
const stories = this.getStories(id);
return combineLatest(project.members.map(member => {
return this.userService.one(member.id).pipe(map(memberData => {
const assigned = stories.pipe(mergeMap(t => combineLatest(t.filter(task => {
if (task && task.assignee?.id === member.id) {
return {
...task,
id: task.id
};
}
}))));
return {
id: member.id,
name: memberData?.displayName ?? 'Unknown',
assigned
};
}));
}));
}));
但我遇到了问题,因为我的函数需要 return Observable<Type[]>
,但它目前正在 returning Observable<{ ...etc, object: Observable<Type[]> }
.
显然问题出在observable里面的observable。但是,我不确定在这种情况下如何解决这个问题。我已经在我当前的代码中解决了很多次这个问题,但是这个问题对我来说很难理解,因为无论我尝试什么都没有改变。
感谢您的提前帮助。
PS:确切的警告是这样的:
Type 'Observable<{ id: string; name: string; assigned: Observable<[UserStory | undefined]>; }[]>' is not assignable to type 'Observable<Member[]>'. Type '{ id: string; name: string; assigned: Observable<[UserStory | undefined]>; }[]' is not assignable to type 'Member[]'. Type '{ id: string; name: string; assigned: Observable<[UserStory | undefined]>; }' is not assignable to type 'Member'. Types of property 'assigned' are incompatible. Type 'Observable<[UserStory | undefined]>' is missing the following properties from type 'UserStory[]': length, pop, push, concat, and 25 more.
有一个地方你试图将一个可观察对象而不是数组作为对象字段。这段代码应该更好
return this.projectService.oneById(id).pipe(mergeMap(project => {
if (!project) {
return [];
}
const stories = this.getStories(id);
return combineLatest(project.members.map(member => {
return this.userService.one(member.id).pipe(map(memberData => {
const assigned$ = stories.pipe(mergeMap(t => combineLatest(t.filter(task => {
if (task && task.assignee?.id === member.id) {
return {
...task,
id: task.id
};
}
}))));
return assigned$.pipe(map(assigned => ({
id: member.id,
name: memberData?.displayName ?? 'Unknown',
assigned
})));
}));
}));
}));