角展平可观察流

时间:2019-04-09 00:55:15

标签: angular rxjs ngx-bootstrap

我有以下Angular代码,这些代码调用了返回Observable的服务

this.dataSource = Observable.create((observer: any) => {
    observer.next(this.asyncSelected);
})
.pipe(
    mergeMap((token: string) =>
        this._animalSuffixesServiceProxy.getAll(token, undefined, undefined, undefined)
    )
);

getAll方法以以下格式返回可观察值:

{"result":{"totalCount":2,"items":[{"animalSuffix":{"name":"Test","id":1}},{"animalSuffix":{"name":"Test2","id":2}}]}}

假设不选择更改getAll的工作方式,我想知道如何最好地通过可观察的运算符将此响应传递给管道,这样我就可以得到一个看起来像这样的扁平化的可观察对象:

[{"name":"Test","id":1},{"name":"Test2","id":2}]

1 个答案:

答案 0 :(得分:0)

您应该能够使用map运算符将您的回复处理为所需的格式。它应该如下所示:

this.dataSource = Observable.create((observer: any) => {
    observer.next(this.asyncSelected);
})
.pipe(
    mergeMap((token: string) =>
        this._animalSuffixesServiceProxy.getAll(token, undefined, undefined, undefined)
    ),
    map(response => response.result.items.map(item => item.animalSuffix))
);

这会将您的回复映射到一系列商品,每个商品的值就是回复商品的animalSuffix值。

map中的pipe()是RxJS运算符,用于映射可观察对象上发射的每个项目。另一个map是数组运算符(它们的行为均相同)。