我有以下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}]
答案 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
是数组运算符(它们的行为均相同)。