何时使用RxJS Observable <object []>和Observable <object>?

时间:2018-08-14 12:37:17

标签: angular typescript rxjs observable

使用Angular 6,我根据hero app定义了服务。如果一个方法应该返回多个值,则我总是返回一个Observable<A[]>,如果我希望返回一个值,例如该方法例如为getById,那么我将返回Observable<A>

问题是,今天我想对返回的值数组之一做一个groupBy(),我可以找到的所有示例都只用Observable<A>而不是Observable<A[]>,{{3 }}。另外,看着like this oneanswers here,这仅适用于〜Observable<A>)和I tried itObservable: 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

1 个答案:

答案 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>