Angular 2 RxJS groupBy flatMap empty

时间:2017-03-28 11:53:25

标签: angular rxjs reactive-programming observable rxjs5

我对RXxJS很新,所以我可能会以错误的方式看待它,但我有一个返回'Verpleegperiodes'数组的服务:

export class Verpleegperiode{
  verpleegperiodeId?: number;
  beginDatumUur?: moment.Moment;
  eindDatumUur?: moment.Moment;
  bed: string;
  kamer: string;
  dienst: Dienst;
  dossier: Dossier;
}

在我的组件中,我试图得到一个'kamer'属性的'Verpleegperiodes'数组,这是为了ex。 '101','102','103',...... 所以我想要一个Observable流,例如:

[{verpleegperiodeId: 1, kamer: '101'},{verpleegperiodeId: 3, kamer: '101'}]
[{verpleegperiodeId: 6, kamer: '102'}]

甚至更好,如果可以使用RxJS

{ kamer: '101', verpleegperiodes: [{verpleegperiodeId: 1, kamer: '101'},{verpleegperiodeId: 3, kamer: '101'}] }
{ kamer: '102', verpleegperiodes: [{verpleegperiodeId: 6, kamer: '102'}] }

为此,我找到了分组依据的文档:https://www.learnrxjs.io/operators/transformation/groupby.html

使用这个,我添加了这段代码(使用路由的dienstId参数)来产生这个:

this.activeVerpleegperiodes$ = this._route.params
  .switchMap((params: Params) => this._infohosService.getActiveVerpleegperiodesByDienstId(params['dienstId']))
  .flatMap(verpleegperiodes => verpleegperiodes)
  .groupBy(vp => { console.log(vp.kamer); return vp.kamer; })
  .flatMap(group => { return group.reduce((acc, curr) => { return [...acc, curr]; }, []); })
  .map(f => { console.log(f); return f; } );

我添加了一些console.log来检查值。 groupBy部分中的console.log返回:

101
101
102
...

我已经在reduce函数中放入了一些console.log来记录acc和curr值,它们将正确的值分组为1个数组。 但是,map函数中的console.log永远不会记录。甚至没有定义或[]。

在我的模板中,我也尝试打印流的异步值:

{{ activeVerpleegperiodes$ | async | json }}

这始终为空。

如何获得所需的结果?

1 个答案:

答案 0 :(得分:0)

如果您Verpleegperiodes数组一次到达,则不需要RxJ。

RxJs可以帮助你随着时间的推移操纵价值。你可能会对这样的事情感兴趣:https://stackoverflow.com/a/34890276/2398593(或者lodash,但是lodash似乎只有这样才有效)。