使用Angular 6,我根据hero app定义了服务。如果一个方法应该返回多个值,则我总是返回一个Observable<A[]>
,如果我希望返回一个值,例如该方法例如为getById
,那么我将返回Observable<A>
。
问题是,今天我想对返回的值数组之一做一个groupBy()
,我可以找到的所有示例都只用Observable<A>
而不是Observable<A[]>
,{{3 }}。另外,看着like this one(answers here,这仅适用于〜Observable<A>
)和I tried it(Observable: represents the idea of an invokable collection of future values or events.
),看来我应该使用{ {1}}用于服务器返回等收集,但是比起单值返回我要用什么呢?
示例服务
Observable<A>
更新:
RxJS introduction。我可以像这样使用数组可观察对象,但是之后我总是需要一个 all(): Observable<T[]> {
return this.httpClient.get<T[]>(this.urls().allURL());
}
paginate(pageRequest: any): Observable<Page<T>> {
return this.httpClient.post<Page<T>>(this.urls().paginateURL(), pageRequest);
}
findOneById(id: number): Observable<T> {
return this.httpClient.get<T>(this.urls().byIdURL(id));
}
。我了解,如果我使用mergeMap
,我将立即获得所有值,因为它们位于数组中,但是如果我使用Observable<A[]>
,我将一一获得它们,这就是为什么不能在Observable<A>
中使用它(例如,期望数组)。问题是,当服务器同步返回集合时,我总是使用*ngFor
吗?A[]
如果我处理异步数据还是需要考虑其他情况。
A
答案 0 :(得分:2)
我不确定您想要什么。如果是仅可观察的组<任何[] []>
export class AppComponent implements OnInit {
people: any[] = [
{ name: 'Sue', age: 25 },
{ name: 'Joe', age: 30 },
{ name: 'Frank', age: 25 },
{ name: 'Sarah', age: 35 }
];
result:any[][];
ngOnInit()
{
this.myObservable().subscribe(res=>{
this.result=res;
})
}
myObservable():Observable<any[][]>
{
return from(this.people).pipe(
groupBy((person:any)=>person.age),
mergeMap(group=>group.pipe(toArray())),
toArray());
}
.html
<div *ngFor="let ages of result">
<strong>{{ages[0].age}}</strong>
<div *ngFor="let item of ages">
{{item.name}}
</div>
</div>